Data preparation
NAs introduced by coercionNAs introduced by coercionNAs introduced by coercionNAs introduced by coercionNAs introduced by coercionNAs introduced by coercion‘-’ not meaningful for factorsJoining, by = c("study", "subid", "target", "happy", "depressed", "fear", "angry", "calm", "sounds", "seeing", "temperature", "odors", "depth", "computations", "thoughts", "reasoning", "remembering", "beliefs", "hungry", "tired", "pain", "nauseated", "safe", "love", "recognizing", "communicating", "guilt", "disrespected", "free_will", "choices", "self_restraint", "intentions", "goal", "conscious", "self_aware", "desires", "embarrassed", "emo_recog", "joy", "morality", "personality", "pleasure", "pride", "CATCH")
Joining, by = c("study", "subid")
back to TOC
Analysis plan
For all studies we conduct exploratory factor analyses using Pearson correlations to find minimum residual solutions.
For each study, we first examine maximal unrotated and rotated solutions. To determine the maximum number of factors to extract, we use the following rule of thumb: With \(p\) observations per participant, we can extract a maximum of \(k\) factors, where \((p-k)*2 > p+k\), i.e., \(k < p/3\). Thus, with 40 mental capacity items, we can extract a maximum of 13 factors.
To determine how many factors to retain, we use the following preset retention criteria, considering the unrotated maximal solution (unless otherwise noted):
- Each factor must have an eigenvalue >1.0.
- Each factor must individually account for >5% of the total variance in the maximal model.
- After rotation, each factor must be the dominant factor (i.e., the factor with the highest factor loading) for ≥1 mental capacity item.
We then examine and interpret varimax-rotated solutions, extracting only the number of factors that meet these criteria.
Note: For Studies 1-2, we initially planned to conduct dimension reduction analyses for each condition (beetle vs. robot) separately. However, we now consider this analysis plan to have been fundamentally flawed: Each of these separate analyses is only capable of surfacing factors that highlight substantial disagreement among participants within that condition thus failing to capture key differences in attributions of mental capacities to beetles vs. robots, with no formal means of synthesizing results across conditions. Nonetheless, the results of these analyses are generally consistent with the findings reported here: The most prominent and reliable finding within each condition is that participants distinguish between emotional and perceptual varieties of experience. See https://osf.io/zd3mu for the preregistered analyses, including analysis scripts.
Study 1
Design: 2 conditions (beetle, robot), between-subjects Date conducted: 2015-12-15
Demographics
NAs introduced by coercion
Joining, by = c("condition", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `condition` joining factor and character vector, coercing into character vector
back to TOC
Exploratory factor analysis
Step 1: Run maximal EFA (without and with rotation)
Factor Analysis using method = minres
Call: fa(r = d1_all, nfactors = 13, rotate = "none", fm = "minres",
cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11
happy 0.85 -0.08 -0.12 0.07 -0.21 0.09 -0.10 0.09 -0.03 0.00 0.01
depressed 0.80 0.04 -0.32 0.16 -0.13 -0.11 -0.06 -0.02 0.01 -0.04 -0.09
fear 0.76 -0.38 0.20 0.02 0.03 -0.01 0.10 0.02 -0.07 -0.09 0.11
angry 0.80 -0.13 -0.07 0.11 -0.11 -0.07 -0.02 0.03 0.02 -0.05 0.08
calm 0.77 -0.16 0.11 -0.02 -0.10 0.13 0.10 -0.07 -0.01 -0.04 -0.03
sounds 0.17 0.39 0.48 0.32 -0.05 0.23 -0.04 0.01 0.10 -0.05 0.05
seeing 0.35 0.20 0.60 0.17 0.14 -0.09 -0.08 0.03 -0.05 0.03 -0.02
temperature 0.27 0.33 0.59 0.19 0.08 0.03 0.03 0.22 0.11 -0.03 -0.02
odors 0.41 0.03 0.50 0.23 0.13 0.05 -0.09 -0.10 -0.02 -0.02 -0.20
depth 0.31 0.41 0.38 0.07 0.01 -0.01 -0.04 0.01 0.07 0.11 0.12
computations -0.25 0.83 -0.14 0.05 -0.15 -0.01 0.06 0.06 0.05 -0.01 0.07
thoughts 0.78 0.03 -0.02 -0.17 -0.02 0.04 -0.15 0.00 -0.03 0.08 0.00
reasoning 0.44 0.61 0.02 -0.17 0.02 -0.02 -0.10 0.04 -0.10 0.04 -0.04
remembering 0.18 0.69 0.28 -0.04 -0.14 -0.01 0.12 0.03 -0.07 -0.07 -0.04
beliefs 0.63 0.28 -0.37 0.00 0.21 0.02 0.01 0.03 0.03 0.04 -0.04
hungry 0.60 -0.62 0.33 0.03 0.17 -0.01 -0.02 0.00 -0.02 0.00 -0.03
tired 0.74 -0.37 0.25 0.00 0.01 -0.06 0.05 -0.03 0.08 -0.04 0.08
pain 0.69 -0.53 0.32 0.02 0.13 -0.02 -0.02 0.01 -0.07 0.02 0.08
nauseated 0.81 -0.19 0.01 0.15 -0.21 -0.03 0.08 -0.19 0.01 0.07 -0.05
safe 0.76 -0.23 0.14 -0.03 -0.07 0.19 0.26 0.06 -0.16 -0.02 -0.01
love 0.82 0.07 -0.32 0.09 -0.05 0.01 -0.06 0.12 -0.01 0.01 -0.01
recognizing 0.20 0.78 0.15 0.05 -0.10 -0.02 0.02 -0.15 -0.08 0.03 0.04
communicating 0.29 0.55 0.28 0.00 0.03 -0.05 0.09 -0.12 -0.16 0.11 0.13
guilt 0.73 0.11 -0.39 0.13 0.08 -0.01 0.00 -0.06 0.04 -0.01 -0.09
disrespected 0.72 0.13 -0.37 0.20 0.08 -0.17 0.18 -0.08 0.06 -0.12 -0.01
free_will 0.75 -0.26 0.11 -0.12 -0.05 0.00 -0.04 0.09 -0.06 -0.07 -0.12
choices 0.46 0.35 0.37 -0.28 0.00 -0.13 0.06 0.10 -0.12 -0.04 -0.16
self_restraint 0.63 0.26 -0.08 -0.16 0.07 0.16 0.02 -0.23 0.07 -0.12 -0.07
intentions 0.68 -0.03 0.16 -0.29 -0.03 0.01 0.11 0.07 0.29 -0.03 0.03
goal 0.35 0.44 0.34 -0.15 -0.04 -0.27 -0.02 -0.03 0.14 -0.01 -0.07
conscious 0.76 -0.23 0.13 -0.06 0.02 0.07 -0.05 -0.09 0.04 0.10 0.01
self_aware 0.74 -0.01 0.03 -0.11 0.01 0.01 -0.11 -0.08 0.05 0.05 0.05
desires 0.78 -0.22 0.09 -0.17 -0.02 -0.08 0.01 -0.02 0.02 0.08 0.05
embarrassed 0.71 0.16 -0.49 0.15 0.17 -0.10 0.10 0.13 -0.04 0.05 0.01
emo_recog 0.61 0.41 -0.25 -0.05 0.21 0.05 -0.07 -0.04 0.01 0.10 0.05
joy 0.86 -0.03 -0.17 0.02 -0.23 0.07 -0.16 0.08 0.00 0.09 -0.05
morality 0.48 0.47 -0.22 -0.15 0.14 0.28 0.09 0.07 0.04 0.04 -0.01
personality 0.70 0.31 -0.15 -0.07 0.06 -0.01 -0.21 -0.01 -0.09 -0.33 0.17
pleasure 0.82 -0.25 0.10 -0.03 -0.07 -0.11 0.04 0.04 0.01 0.07 0.10
pride 0.79 0.14 -0.39 0.11 0.04 -0.05 0.05 0.05 -0.03 0.07 -0.02
MR12 MR13 h2 u2 com
happy 0.06 -0.15 0.84 0.16 1.4
depressed -0.05 -0.03 0.81 0.19 1.6
fear 0.02 0.06 0.80 0.20 1.8
angry 0.02 0.08 0.71 0.29 1.2
calm 0.01 0.06 0.68 0.32 1.3
sounds 0.04 0.10 0.60 0.40 3.9
seeing 0.02 -0.04 0.59 0.41 2.3
temperature -0.06 0.04 0.64 0.36 2.9
odors 0.06 0.02 0.55 0.45 3.2
depth -0.08 -0.15 0.48 0.52 3.8
computations 0.01 0.04 0.80 0.20 1.4
thoughts 0.03 0.11 0.69 0.31 1.2
reasoning -0.11 0.04 0.63 0.37 2.3
remembering -0.03 -0.02 0.62 0.38 1.7
beliefs -0.03 0.05 0.67 0.33 2.4
hungry -0.03 -0.07 0.90 0.10 2.7
tired -0.06 -0.09 0.78 0.22 1.9
pain -0.03 0.00 0.89 0.11 2.5
nauseated -0.28 0.06 0.90 0.10 1.8
safe 0.03 -0.05 0.79 0.21 1.8
love 0.07 -0.06 0.82 0.18 1.4
recognizing 0.04 0.05 0.71 0.29 1.4
communicating 0.14 -0.04 0.57 0.43 3.0
guilt 0.08 -0.07 0.75 0.25 1.8
disrespected 0.07 0.00 0.81 0.19 2.2
free_will 0.08 0.16 0.73 0.27 1.6
choices -0.06 -0.06 0.63 0.37 4.6
self_restraint 0.02 -0.10 0.62 0.38 2.3
intentions 0.02 0.03 0.68 0.32 2.0
goal 0.06 -0.03 0.56 0.44 4.3
conscious 0.01 0.00 0.67 0.33 1.4
self_aware 0.10 0.02 0.60 0.40 1.2
desires 0.01 0.07 0.71 0.29 1.4
embarrassed -0.04 -0.01 0.86 0.14 2.4
emo_recog -0.07 0.05 0.68 0.32 2.7
joy 0.01 -0.08 0.87 0.13 1.4
morality -0.04 -0.04 0.64 0.36 3.7
personality -0.09 -0.01 0.81 0.19 2.5
pleasure 0.04 0.00 0.79 0.21 1.3
pride 0.02 0.07 0.82 0.18 1.7
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11 MR12
SS loadings 16.55 5.24 3.42 0.75 0.51 0.42 0.35 0.31 0.28 0.26 0.24 0.21
Proportion Var 0.41 0.13 0.09 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var 0.41 0.54 0.63 0.65 0.66 0.67 0.68 0.69 0.70 0.70 0.71 0.71
Proportion Explained 0.58 0.18 0.12 0.03 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Proportion 0.58 0.76 0.88 0.90 0.92 0.94 0.95 0.96 0.97 0.98 0.99 0.99
MR13
SS loadings 0.18
Proportion Var 0.00
Cumulative Var 0.72
Proportion Explained 0.01
Cumulative Proportion 1.00
Mean item complexity = 2.2
Test of the hypothesis that 13 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 36.39 with Chi Square of 14185
The degrees of freedom for the model are 338 and the objective function was 1.03
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.01
The harmonic number of observations is 405 with the empirical chi square 57.84 with prob < 1
The total number of observations was 405 with Likelihood Chi Square = 390.74 with prob < 0.025
Tucker Lewis Index of factoring reliability = 0.991
RMSEA index = 0.024 and the 90 % confidence intervals are 0.008 0.028
BIC = -1638.58
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3 MR4 MR5 MR6 MR7
Correlation of scores with factors 0.99 0.98 0.96 0.84 0.85 0.76 0.78
Multiple R square of scores with factors 0.99 0.95 0.92 0.71 0.72 0.58 0.61
Minimum correlation of possible factor scores 0.97 0.90 0.85 0.41 0.44 0.17 0.22
MR8 MR9 MR10 MR11 MR12 MR13
Correlation of scores with factors 0.74 0.69 0.73 0.68 0.72 0.65
Multiple R square of scores with factors 0.55 0.48 0.53 0.46 0.52 0.42
Minimum correlation of possible factor scores 0.10 -0.04 0.06 -0.09 0.04 -0.17
[1] 3
Step 2: Run EFA with varimax rotation
Factor Analysis using method = minres
Call: fa(r = d1_all, nfactors = nfactors_d1_all, rotate = chosenRotType,
fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 h2 u2 com
happy 0.57 0.63 0.09 0.74 0.26 2.0
depressed 0.39 0.76 0.03 0.73 0.27 1.5
fear 0.83 0.26 0.06 0.76 0.24 1.2
angry 0.60 0.55 0.08 0.67 0.33 2.0
calm 0.66 0.40 0.17 0.63 0.37 1.8
sounds 0.06 -0.05 0.61 0.38 0.62 1.0
seeing 0.35 -0.08 0.63 0.52 0.48 1.6
temperature 0.21 -0.07 0.68 0.51 0.49 1.2
odors 0.45 -0.02 0.45 0.40 0.60 2.0
depth 0.10 0.11 0.62 0.41 0.59 1.1
computations -0.73 0.21 0.42 0.76 0.24 1.8
thoughts 0.51 0.55 0.21 0.61 0.39 2.3
reasoning -0.07 0.49 0.56 0.55 0.45 2.0
remembering -0.20 0.18 0.71 0.58 0.42 1.3
beliefs 0.11 0.77 0.12 0.61 0.39 1.1
hungry 0.92 -0.01 -0.06 0.86 0.14 1.0
tired 0.83 0.22 0.10 0.75 0.25 1.2
pain 0.92 0.09 0.02 0.86 0.14 1.0
nauseated 0.67 0.48 0.09 0.68 0.32 1.9
safe 0.70 0.35 0.13 0.63 0.37 1.5
love 0.39 0.79 0.06 0.78 0.22 1.5
recognizing -0.28 0.31 0.70 0.66 0.34 1.7
communicating -0.03 0.21 0.64 0.46 0.54 1.2
guilt 0.27 0.79 0.01 0.70 0.30 1.2
disrespected 0.27 0.77 0.04 0.66 0.34 1.3
free_will 0.71 0.35 0.09 0.64 0.36 1.5
choices 0.24 0.20 0.60 0.45 0.55 1.6
self_restraint 0.24 0.57 0.30 0.47 0.53 1.9
intentions 0.54 0.35 0.26 0.48 0.52 2.2
goal 0.09 0.17 0.62 0.42 0.58 1.2
conscious 0.71 0.36 0.12 0.64 0.36 1.6
self_aware 0.53 0.48 0.21 0.55 0.45 2.3
desires 0.70 0.40 0.11 0.66 0.34 1.6
embarrassed 0.20 0.85 -0.02 0.76 0.24 1.1
emo_recog 0.06 0.72 0.28 0.60 0.40 1.3
joy 0.53 0.68 0.10 0.75 0.25 1.9
morality -0.04 0.62 0.31 0.48 0.52 1.5
personality 0.23 0.67 0.30 0.59 0.41 1.6
pleasure 0.75 0.41 0.11 0.75 0.25 1.6
pride 0.29 0.84 0.05 0.79 0.21 1.3
MR1 MR2 MR3
SS loadings 10.13 9.69 5.12
Proportion Var 0.25 0.24 0.13
Cumulative Var 0.25 0.50 0.62
Proportion Explained 0.41 0.39 0.21
Cumulative Proportion 0.41 0.79 1.00
Mean item complexity = 1.5
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 36.39 with Chi Square of 14185
The degrees of freedom for the model are 663 and the objective function was 3.83
The root mean square of the residuals (RMSR) is 0.03
The df corrected root mean square of the residuals is 0.03
The harmonic number of observations is 405 with the empirical chi square 479.29 with prob < 1
The total number of observations was 405 with Likelihood Chi Square = 1486.88 with prob < 4.2e-65
Tucker Lewis Index of factoring reliability = 0.927
RMSEA index = 0.058 and the 90 % confidence intervals are 0.052 0.059
BIC = -2493.69
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3
Correlation of scores with factors 0.98 0.97 0.95
Multiple R square of scores with factors 0.97 0.95 0.90
Minimum correlation of possible factor scores 0.93 0.90 0.81
back to TOC
Study 2
Design: 2 conditions (beetle, robot), between-subjects (replication of Study 1) Date conducted: 2016-01-12
Demographics
Joining, by = c("condition", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `condition` joining factor and character vector, coercing into character vector
back to TOC
Exploratory factor analysis
Step 1: Run maximal EFA (without and with rotation)
Factor Analysis using method = minres
Call: fa(r = d2_all, nfactors = 13, rotate = "none", fm = "minres",
cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11
happy 0.83 -0.08 -0.18 -0.18 0.15 -0.04 -0.04 0.01 -0.08 0.02 0.00
depressed 0.76 -0.01 -0.37 -0.02 0.13 0.04 -0.01 0.15 0.00 0.02 -0.12
fear 0.76 -0.36 0.21 0.04 0.05 -0.03 -0.06 0.00 0.03 0.00 0.08
angry 0.77 -0.17 -0.06 -0.05 0.19 0.02 -0.06 -0.13 0.13 -0.23 -0.07
calm 0.74 -0.05 0.08 -0.23 0.04 -0.08 -0.03 -0.04 -0.14 0.01 0.03
sounds 0.23 0.46 0.50 -0.11 0.13 0.12 0.02 0.05 0.05 -0.03 0.14
seeing 0.45 0.24 0.55 0.08 -0.05 0.13 -0.12 -0.07 0.01 0.07 0.04
temperature 0.32 0.28 0.53 0.16 0.16 0.02 -0.10 0.11 -0.10 -0.02 -0.08
odors 0.48 0.10 0.51 0.34 0.09 -0.02 -0.16 0.13 -0.16 -0.06 -0.10
depth 0.26 0.47 0.35 0.33 0.25 -0.38 0.34 0.01 0.06 0.02 0.04
computations -0.26 0.83 -0.12 -0.13 0.13 0.02 0.06 0.08 0.02 0.00 -0.01
thoughts 0.77 0.00 -0.01 -0.11 -0.23 -0.10 0.12 0.07 -0.08 0.01 -0.05
reasoning 0.36 0.59 -0.04 0.03 -0.21 -0.08 -0.03 0.00 -0.08 0.06 -0.07
remembering 0.19 0.69 0.24 -0.19 -0.01 0.08 0.00 0.06 -0.01 0.06 0.10
beliefs 0.53 0.26 -0.33 0.07 -0.08 0.20 0.16 0.00 -0.24 0.06 0.01
hungry 0.61 -0.62 0.31 0.19 -0.02 0.08 -0.04 0.00 -0.02 0.07 0.01
tired 0.73 -0.40 0.26 0.02 0.03 0.04 0.04 -0.08 0.06 0.02 0.04
pain 0.67 -0.52 0.28 0.11 -0.01 0.04 -0.02 0.01 0.07 0.09 -0.01
nauseated 0.70 -0.20 -0.02 0.00 0.12 0.03 0.00 -0.02 0.02 0.13 0.05
safe 0.75 -0.22 0.13 -0.05 -0.02 -0.09 -0.03 -0.14 -0.18 -0.06 0.22
love 0.74 0.00 -0.34 -0.05 0.08 0.09 0.05 0.14 0.02 0.06 -0.05
recognizing 0.20 0.74 0.04 -0.08 0.11 0.02 -0.02 0.02 0.00 -0.02 0.09
communicating 0.36 0.51 0.38 -0.05 0.04 0.20 -0.02 0.02 0.12 0.03 -0.02
guilt 0.64 0.14 -0.55 0.15 0.07 0.10 -0.01 0.01 -0.02 -0.02 0.02
disrespected 0.64 0.09 -0.43 0.17 0.04 0.03 -0.07 0.01 0.09 -0.14 0.09
free_will 0.66 -0.28 0.23 -0.01 -0.17 0.10 0.05 0.16 0.19 0.03 -0.03
choices 0.47 0.43 0.35 -0.10 -0.11 0.05 0.03 -0.04 0.08 0.07 -0.01
self_restraint 0.49 0.35 -0.15 0.09 -0.22 -0.05 0.03 -0.03 -0.04 -0.09 -0.07
intentions 0.67 0.00 0.25 0.00 -0.22 0.12 0.25 -0.13 0.04 -0.15 -0.04
goal 0.40 0.44 0.38 -0.05 -0.02 0.09 -0.03 -0.16 -0.08 -0.15 -0.14
conscious 0.72 -0.27 0.21 -0.10 -0.19 -0.11 0.02 0.14 -0.06 -0.04 0.13
self_aware 0.73 0.06 -0.03 -0.08 -0.20 -0.19 -0.07 0.27 0.08 -0.12 0.02
desires 0.79 -0.16 0.03 -0.02 0.02 0.01 0.18 -0.12 0.02 0.09 -0.12
embarrassed 0.61 0.12 -0.53 0.15 0.06 0.16 0.05 0.08 -0.06 -0.01 0.03
emo_recog 0.57 0.42 -0.27 0.14 -0.08 -0.12 -0.11 -0.14 0.07 0.14 0.03
joy 0.82 -0.07 -0.14 -0.22 0.20 -0.11 -0.08 -0.07 -0.01 -0.02 -0.04
morality 0.40 0.52 -0.27 0.19 -0.21 -0.11 -0.22 -0.12 0.09 0.07 0.01
personality 0.64 0.31 -0.16 -0.14 0.03 -0.13 -0.06 -0.05 0.09 0.03 -0.05
pleasure 0.81 -0.24 0.03 -0.17 0.09 -0.09 -0.01 0.00 -0.01 0.11 -0.12
pride 0.70 0.09 -0.47 0.15 0.03 0.13 0.06 -0.01 0.06 -0.04 0.12
MR12 MR13 h2 u2 com
happy -0.02 -0.04 0.80 0.203 1.3
depressed -0.03 0.01 0.76 0.240 1.7
fear 0.05 0.09 0.77 0.226 1.7
angry 0.08 0.16 0.79 0.214 1.8
calm -0.04 0.04 0.65 0.353 1.4
sounds 0.11 -0.08 0.61 0.392 3.2
seeing -0.11 0.05 0.63 0.374 2.9
temperature 0.06 -0.05 0.55 0.448 3.2
odors 0.03 -0.05 0.71 0.294 3.7
depth -0.08 0.01 0.86 0.141 6.2
computations 0.07 -0.02 0.82 0.179 1.4
thoughts 0.05 -0.04 0.71 0.290 1.4
reasoning 0.10 -0.02 0.56 0.441 2.2
remembering -0.05 -0.01 0.63 0.375 1.7
beliefs 0.02 0.16 0.61 0.385 3.7
hungry -0.05 0.00 0.90 0.099 2.8
tired -0.02 0.04 0.78 0.219 1.9
pain 0.01 0.05 0.83 0.169 2.4
nauseated 0.08 0.05 0.58 0.419 1.4
safe -0.02 -0.08 0.75 0.254 1.7
love 0.03 -0.02 0.70 0.299 1.6
recognizing 0.03 0.13 0.63 0.369 1.3
communicating -0.10 0.09 0.61 0.389 3.5
guilt -0.14 0.00 0.80 0.204 2.4
disrespected 0.10 -0.06 0.69 0.309 2.3
free_will -0.06 -0.11 0.69 0.308 2.3
choices 0.04 -0.04 0.56 0.435 3.3
self_restraint -0.09 0.12 0.49 0.513 3.0
intentions -0.04 -0.07 0.68 0.320 2.2
goal -0.02 -0.07 0.59 0.409 4.0
conscious 0.01 0.03 0.74 0.258 2.0
self_aware 0.02 0.08 0.72 0.277 1.8
desires 0.19 -0.01 0.76 0.244 1.5
embarrassed -0.08 -0.08 0.74 0.257 2.5
emo_recog 0.02 0.02 0.68 0.319 3.1
joy -0.08 -0.12 0.84 0.160 1.5
morality 0.06 -0.05 0.67 0.328 4.2
personality -0.16 -0.03 0.61 0.390 2.1
pleasure 0.01 0.02 0.78 0.217 1.4
pride 0.06 -0.08 0.79 0.211 2.2
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11 MR12
SS loadings 14.94 5.37 3.77 0.79 0.68 0.52 0.41 0.36 0.31 0.26 0.25 0.22
Proportion Var 0.37 0.13 0.09 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var 0.37 0.51 0.60 0.62 0.64 0.65 0.66 0.67 0.68 0.69 0.69 0.70
Proportion Explained 0.53 0.19 0.13 0.03 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Proportion 0.53 0.72 0.86 0.89 0.91 0.93 0.94 0.96 0.97 0.98 0.99 0.99
MR13
SS loadings 0.20
Proportion Var 0.00
Cumulative Var 0.70
Proportion Explained 0.01
Cumulative Proportion 1.00
Mean item complexity = 2.4
Test of the hypothesis that 13 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 33.07 with Chi Square of 12924.08
The degrees of freedom for the model are 338 and the objective function was 1.02
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.02
The harmonic number of observations is 406 with the empirical chi square 64.06 with prob < 1
The total number of observations was 406 with Likelihood Chi Square = 390.7 with prob < 0.025
Tucker Lewis Index of factoring reliability = 0.99
RMSEA index = 0.024 and the 90 % confidence intervals are 0.008 0.028
BIC = -1639.45
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3 MR4 MR5 MR6 MR7
Correlation of scores with factors 0.99 0.98 0.96 0.88 0.84 0.82 0.79
Multiple R square of scores with factors 0.98 0.95 0.93 0.77 0.71 0.68 0.62
Minimum correlation of possible factor scores 0.97 0.90 0.86 0.54 0.42 0.36 0.24
MR8 MR9 MR10 MR11 MR12 MR13
Correlation of scores with factors 0.75 0.71 0.69 0.68 0.66 0.64
Multiple R square of scores with factors 0.56 0.50 0.48 0.46 0.44 0.40
Minimum correlation of possible factor scores 0.12 0.00 -0.04 -0.07 -0.12 -0.19
[1] 3
Step 2: Run EFA with varimax rotation
Factor Analysis using method = minres
Call: fa(r = d2_all, nfactors = nfactors_d2_all, rotate = chosenRotType,
fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 h2 u2 com
happy 0.57 0.63 0.08 0.73 0.27 2.0
depressed 0.41 0.73 0.00 0.70 0.30 1.6
fear 0.83 0.21 0.09 0.75 0.25 1.2
angry 0.62 0.47 0.08 0.61 0.39 1.9
calm 0.59 0.39 0.24 0.56 0.44 2.1
sounds 0.07 -0.06 0.71 0.51 0.49 1.0
seeing 0.37 -0.02 0.65 0.56 0.44 1.6
temperature 0.25 -0.07 0.61 0.44 0.56 1.4
odors 0.45 -0.01 0.51 0.46 0.54 2.0
depth 0.03 0.08 0.58 0.34 0.66 1.0
computations -0.73 0.19 0.45 0.77 0.23 1.8
thoughts 0.55 0.49 0.23 0.60 0.40 2.3
reasoning -0.11 0.44 0.52 0.48 0.52 2.1
remembering -0.19 0.18 0.70 0.56 0.44 1.3
beliefs 0.11 0.64 0.15 0.44 0.56 1.2
hungry 0.91 -0.04 -0.07 0.84 0.16 1.0
tired 0.86 0.14 0.09 0.77 0.23 1.1
pain 0.90 0.05 0.00 0.81 0.19 1.0
nauseated 0.62 0.39 0.06 0.54 0.46 1.7
safe 0.71 0.31 0.15 0.62 0.38 1.5
love 0.41 0.70 0.02 0.66 0.34 1.6
recognizing -0.28 0.34 0.62 0.59 0.41 2.0
communicating 0.09 0.12 0.71 0.53 0.47 1.1
guilt 0.18 0.84 -0.04 0.73 0.27 1.1
disrespected 0.25 0.73 -0.01 0.60 0.40 1.2
free_will 0.72 0.17 0.14 0.56 0.44 1.2
choices 0.21 0.18 0.67 0.53 0.47 1.3
self_restraint 0.09 0.53 0.31 0.38 0.62 1.7
intentions 0.56 0.25 0.35 0.50 0.50 2.1
goal 0.16 0.13 0.67 0.50 0.50 1.2
conscious 0.75 0.22 0.15 0.63 0.37 1.3
self_aware 0.47 0.49 0.25 0.52 0.48 2.5
desires 0.67 0.42 0.14 0.64 0.36 1.8
embarrassed 0.17 0.79 -0.05 0.66 0.34 1.1
emo_recog 0.06 0.69 0.31 0.57 0.43 1.4
joy 0.58 0.59 0.11 0.69 0.31 2.1
morality -0.11 0.60 0.33 0.47 0.53 1.6
personality 0.21 0.61 0.32 0.52 0.48 1.8
pleasure 0.73 0.41 0.09 0.71 0.29 1.6
pride 0.27 0.80 -0.01 0.71 0.29 1.2
MR1 MR2 MR3
SS loadings 9.98 8.28 5.52
Proportion Var 0.25 0.21 0.14
Cumulative Var 0.25 0.46 0.59
Proportion Explained 0.42 0.35 0.23
Cumulative Proportion 0.42 0.77 1.00
Mean item complexity = 1.5
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 33.07 with Chi Square of 12924.08
The degrees of freedom for the model are 663 and the objective function was 3.95
The root mean square of the residuals (RMSR) is 0.03
The df corrected root mean square of the residuals is 0.03
The harmonic number of observations is 406 with the empirical chi square 586.55 with prob < 0.98
The total number of observations was 406 with Likelihood Chi Square = 1534.4 with prob < 6.4e-71
Tucker Lewis Index of factoring reliability = 0.915
RMSEA index = 0.059 and the 90 % confidence intervals are 0.053 0.061
BIC = -2447.81
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy
MR1 MR2 MR3
Correlation of scores with factors 0.98 0.97 0.96
Multiple R square of scores with factors 0.96 0.94 0.91
Minimum correlation of possible factor scores 0.93 0.88 0.83
back to TOC
Study 3
Design: 2 conditions (beetle, robot), within-subjects Date conducted: 2016-01-10
Exploratory factor analysis
Step 1: Run maximal EFA (without and with rotation)
Factor Analysis using method = minres
Call: fa(r = d3_all, nfactors = 13, rotate = "none", fm = "minres",
cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11
happy 0.86 0.00 -0.16 0.06 -0.13 -0.12 -0.03 -0.09 -0.09 0.12 -0.12
depressed 0.75 0.07 -0.33 0.20 -0.08 0.02 -0.05 -0.05 0.08 -0.05 0.07
fear 0.80 -0.33 0.09 -0.04 -0.08 0.01 -0.03 -0.04 0.03 0.06 0.00
angry 0.81 -0.08 -0.15 0.03 -0.16 0.01 0.03 0.02 -0.09 0.08 -0.02
calm 0.81 -0.07 0.04 -0.07 -0.12 -0.08 -0.04 -0.13 0.05 0.03 -0.09
sounds 0.32 0.29 0.57 0.24 0.00 -0.19 0.17 -0.13 -0.18 -0.06 0.00
seeing 0.40 0.11 0.52 0.11 0.07 -0.16 -0.01 -0.07 -0.10 -0.08 0.00
temperature 0.42 0.11 0.59 0.21 0.04 0.07 0.05 0.08 0.07 0.17 0.04
odors 0.53 -0.06 0.45 0.20 0.21 -0.05 -0.05 0.14 0.02 0.07 -0.04
depth 0.39 0.30 0.40 0.17 0.03 0.14 0.15 0.01 0.23 -0.14 -0.04
computations -0.40 0.73 -0.13 -0.03 -0.16 0.03 0.12 0.04 0.10 0.06 -0.02
thoughts 0.81 0.06 0.02 -0.20 -0.05 -0.17 0.11 0.02 0.03 -0.03 0.04
reasoning 0.38 0.63 0.06 -0.14 -0.07 -0.08 -0.04 -0.06 0.09 -0.05 0.11
remembering 0.24 0.60 0.27 0.00 -0.15 0.14 -0.03 0.06 -0.11 -0.02 0.08
beliefs 0.55 0.27 -0.31 0.03 0.23 0.19 0.16 -0.05 -0.09 0.03 -0.07
hungry 0.67 -0.60 0.21 0.07 0.12 0.03 -0.11 -0.03 0.04 -0.01 0.05
tired 0.77 -0.40 0.09 0.04 0.01 0.08 -0.09 -0.06 0.10 0.00 -0.04
pain 0.71 -0.53 0.20 0.05 0.06 0.00 -0.05 0.02 -0.01 -0.06 0.03
nauseated 0.78 -0.22 -0.06 0.12 -0.15 0.08 -0.01 -0.04 0.14 -0.14 0.05
safe 0.75 -0.24 0.10 -0.06 0.00 -0.08 -0.11 -0.02 -0.07 0.05 0.09
love 0.80 0.06 -0.22 0.08 -0.08 0.05 -0.04 -0.03 -0.07 -0.13 0.10
recognizing 0.22 0.71 0.17 0.03 -0.13 -0.18 -0.06 -0.02 0.07 0.00 -0.03
communicating 0.22 0.54 0.26 0.00 -0.01 0.05 -0.18 0.01 0.01 0.03 -0.03
guilt 0.66 0.19 -0.39 0.18 0.06 -0.04 0.02 0.07 0.01 0.07 0.17
disrespected 0.67 0.18 -0.38 0.19 0.07 0.08 0.07 0.01 -0.07 0.00 0.09
free_will 0.79 -0.21 0.07 -0.22 0.10 -0.02 0.11 -0.03 -0.06 -0.08 0.01
choices 0.52 0.29 0.34 -0.25 0.03 0.04 -0.07 -0.04 0.08 0.16 0.09
self_restraint 0.60 0.25 -0.14 -0.14 0.00 0.16 -0.01 -0.20 -0.04 -0.03 0.03
intentions 0.70 -0.02 0.18 -0.28 0.00 0.11 0.05 0.13 -0.06 0.01 0.09
goal 0.43 0.36 0.30 -0.02 -0.10 0.30 -0.11 0.10 -0.15 -0.07 -0.12
conscious 0.80 -0.19 0.08 -0.15 0.06 -0.05 0.10 0.02 0.04 -0.04 0.02
self_aware 0.74 0.00 0.00 -0.19 0.04 -0.12 0.11 0.08 0.08 -0.03 -0.13
desires 0.84 -0.22 0.08 -0.11 -0.06 0.10 0.11 0.12 -0.02 0.03 -0.01
embarrassed 0.63 0.16 -0.42 0.15 0.05 -0.14 0.02 0.17 -0.01 0.05 0.02
emo_recog 0.59 0.40 -0.16 -0.09 0.24 -0.11 -0.13 0.04 0.00 -0.04 -0.01
joy 0.84 -0.01 -0.19 0.10 -0.18 -0.03 0.05 -0.04 0.01 0.12 -0.06
morality 0.40 0.53 -0.15 -0.04 0.37 0.08 0.01 -0.17 0.05 0.08 -0.04
personality 0.68 0.32 -0.09 -0.08 0.00 -0.13 -0.07 0.14 -0.04 -0.12 -0.06
pleasure 0.84 -0.22 -0.02 0.02 -0.12 0.10 0.05 -0.02 0.00 0.06 -0.07
pride 0.71 0.17 -0.39 0.08 0.07 0.01 -0.12 0.07 0.03 -0.07 -0.14
MR12 MR13 h2 u2 com
happy 0.10 -0.06 0.86 0.14 1.3
depressed -0.05 0.00 0.75 0.25 1.7
fear 0.01 0.06 0.77 0.23 1.4
angry -0.01 0.02 0.73 0.27 1.2
calm -0.06 0.01 0.72 0.28 1.2
sounds 0.02 0.06 0.70 0.30 3.7
seeing -0.04 0.04 0.50 0.50 2.6
temperature 0.10 0.07 0.65 0.35 2.7
odors -0.01 -0.03 0.60 0.40 2.9
depth -0.01 -0.06 0.56 0.44 4.9
computations 0.15 0.07 0.80 0.20 2.0
thoughts -0.03 -0.03 0.76 0.24 1.3
reasoning 0.04 -0.03 0.60 0.40 2.0
remembering -0.07 -0.03 0.56 0.44 2.2
beliefs 0.00 0.02 0.60 0.40 3.2
hungry -0.01 -0.05 0.90 0.10 2.4
tired 0.06 0.05 0.81 0.19 1.7
pain 0.00 -0.05 0.84 0.16 2.1
nauseated 0.04 0.07 0.76 0.24 1.5
safe -0.03 0.06 0.68 0.32 1.4
love 0.14 -0.02 0.77 0.23 1.4
recognizing -0.10 -0.03 0.66 0.34 1.6
communicating -0.03 -0.01 0.44 0.56 2.2
guilt -0.04 -0.07 0.71 0.29 2.3
disrespected -0.14 0.06 0.71 0.29 2.3
free_will 0.12 0.09 0.78 0.22 1.5
choices -0.01 0.12 0.59 0.41 3.6
self_restraint -0.04 0.02 0.53 0.47 2.1
intentions -0.02 0.02 0.64 0.36 1.7
goal 0.01 -0.05 0.57 0.43 4.7
conscious 0.03 -0.11 0.75 0.25 1.3
self_aware -0.16 0.04 0.67 0.33 1.5
desires 0.01 -0.03 0.82 0.18 1.3
embarrassed 0.00 0.04 0.68 0.32 2.4
emo_recog 0.09 -0.08 0.66 0.34 2.8
joy 0.07 -0.11 0.83 0.17 1.3
morality 0.01 -0.06 0.66 0.34 3.4
personality 0.06 -0.01 0.64 0.36 1.8
pleasure -0.10 -0.06 0.81 0.19 1.3
pride 0.00 0.20 0.77 0.23 2.2
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11 MR12
SS loadings 16.94 4.54 2.90 0.73 0.58 0.49 0.31 0.28 0.27 0.23 0.20 0.19
Proportion Var 0.42 0.11 0.07 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.00
Cumulative Var 0.42 0.54 0.61 0.63 0.64 0.65 0.66 0.67 0.68 0.68 0.69 0.69
Proportion Explained 0.61 0.16 0.10 0.03 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Proportion 0.61 0.77 0.88 0.90 0.92 0.94 0.95 0.96 0.97 0.98 0.99 0.99
MR13
SS loadings 0.17
Proportion Var 0.00
Cumulative Var 0.70
Proportion Explained 0.01
Cumulative Proportion 1.00
Mean item complexity = 2.2
Test of the hypothesis that 13 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 34.22 with Chi Square of 13170.85
The degrees of freedom for the model are 338 and the objective function was 1.01
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.02
The harmonic number of observations is 400 with the empirical chi square 61.88 with prob < 1
The total number of observations was 400 with Likelihood Chi Square = 381 with prob < 0.053
Tucker Lewis Index of factoring reliability = 0.992
RMSEA index = 0.022 and the 90 % confidence intervals are 0 0.027
BIC = -1644.12
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3 MR4 MR5 MR6 MR7
Correlation of scores with factors 0.99 0.97 0.95 0.84 0.82 0.77 0.72
Multiple R square of scores with factors 0.99 0.94 0.90 0.71 0.67 0.59 0.51
Minimum correlation of possible factor scores 0.97 0.88 0.80 0.41 0.34 0.18 0.02
MR8 MR9 MR10 MR11 MR12 MR13
Correlation of scores with factors 0.68 0.68 0.67 0.65 0.65 0.63
Multiple R square of scores with factors 0.47 0.46 0.45 0.42 0.43 0.40
Minimum correlation of possible factor scores -0.06 -0.07 -0.10 -0.16 -0.14 -0.20
[1] 3
Step 2: Run EFA with varimax rotation
Factor Analysis using method = minres
Call: fa(r = d3_all, nfactors = nfactors_d3_all, rotate = chosenRotType,
fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR3 MR1 MR2 h2 u2 com
happy 0.54 0.66 0.17 0.76 0.24 2.1
depressed 0.37 0.73 0.06 0.68 0.32 1.5
fear 0.79 0.34 0.10 0.76 0.24 1.4
angry 0.56 0.60 0.11 0.69 0.31 2.1
calm 0.61 0.48 0.24 0.66 0.34 2.2
sounds 0.20 -0.04 0.65 0.47 0.53 1.2
seeing 0.36 -0.04 0.55 0.44 0.56 1.7
temperature 0.39 -0.07 0.60 0.52 0.48 1.8
odors 0.53 0.03 0.43 0.47 0.53 1.9
depth 0.19 0.11 0.59 0.39 0.61 1.3
computations -0.79 0.10 0.26 0.70 0.30 1.2
thoughts 0.52 0.55 0.31 0.66 0.34 2.6
reasoning -0.13 0.43 0.57 0.54 0.46 2.0
remembering -0.15 0.20 0.65 0.49 0.51 1.3
beliefs 0.11 0.65 0.14 0.46 0.54 1.2
hungry 0.92 0.08 -0.03 0.86 0.14 1.0
tired 0.83 0.30 0.05 0.77 0.23 1.3
pain 0.90 0.14 0.02 0.83 0.17 1.0
nauseated 0.66 0.47 0.07 0.66 0.34 1.8
safe 0.70 0.34 0.16 0.63 0.37 1.6
love 0.44 0.69 0.15 0.69 0.31 1.8
recognizing -0.26 0.30 0.65 0.58 0.42 1.8
communicating -0.12 0.17 0.60 0.41 0.59 1.3
guilt 0.21 0.76 0.07 0.63 0.37 1.2
disrespected 0.23 0.75 0.08 0.62 0.38 1.2
free_will 0.70 0.39 0.17 0.67 0.33 1.7
choices 0.27 0.23 0.58 0.46 0.54 1.8
self_restraint 0.20 0.57 0.26 0.44 0.56 1.7
intentions 0.54 0.33 0.33 0.52 0.48 2.4
goal 0.15 0.22 0.57 0.39 0.61 1.5
conscious 0.70 0.40 0.19 0.69 0.31 1.8
self_aware 0.50 0.48 0.24 0.54 0.46 2.4
desires 0.74 0.42 0.18 0.76 0.24 1.7
embarrassed 0.19 0.74 0.02 0.59 0.41 1.1
emo_recog 0.10 0.64 0.34 0.53 0.47 1.6
joy 0.52 0.67 0.14 0.74 0.26 2.0
morality -0.11 0.54 0.37 0.44 0.56 1.8
personality 0.23 0.62 0.36 0.57 0.43 1.9
pleasure 0.71 0.48 0.11 0.76 0.24 1.8
pride 0.25 0.77 0.07 0.67 0.33 1.2
MR3 MR1 MR2
SS loadings 10.13 9.03 4.92
Proportion Var 0.25 0.23 0.12
Cumulative Var 0.25 0.48 0.60
Proportion Explained 0.42 0.38 0.20
Cumulative Proportion 0.42 0.80 1.00
Mean item complexity = 1.6
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 34.22 with Chi Square of 13170.85
The degrees of freedom for the model are 663 and the objective function was 3.61
The root mean square of the residuals (RMSR) is 0.03
The df corrected root mean square of the residuals is 0.03
The harmonic number of observations is 400 with the empirical chi square 508.77 with prob < 1
The total number of observations was 400 with Likelihood Chi Square = 1380.26 with prob < 1.3e-52
Tucker Lewis Index of factoring reliability = 0.932
RMSEA index = 0.054 and the 90 % confidence intervals are 0.048 0.056
BIC = -2592.08
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR3 MR1 MR2
Correlation of scores with factors 0.98 0.96 0.94
Multiple R square of scores with factors 0.96 0.93 0.88
Minimum correlation of possible factor scores 0.92 0.86 0.76
back to TOC
Study 4
Design: 21 conditions, between-subjects Date conducted: 2016-01-14
Demographics
Joining, by = c("condition", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `condition` joining factor and character vector, coercing into character vector
back to TOC
Exploratory factor analysis
Step 1: Run maximal EFA (without and with rotation)
Factor Analysis using method = minres
Call: fa(r = d4_all, nfactors = 13, rotate = "none", fm = "minres",
cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11
happy 0.88 -0.07 -0.25 0.15 -0.15 0.05 -0.03 0.07 -0.03 0.09 0.05
depressed 0.81 0.17 -0.16 0.15 0.03 -0.24 0.00 -0.06 0.02 -0.07 -0.01
fear 0.84 -0.37 -0.13 -0.07 0.10 -0.01 0.00 0.04 -0.05 -0.01 0.00
angry 0.86 -0.07 -0.15 0.12 -0.04 -0.09 -0.06 -0.05 0.06 -0.07 -0.04
calm 0.85 -0.20 -0.15 -0.03 -0.02 0.03 -0.02 0.11 -0.08 0.09 0.00
sounds 0.71 -0.32 0.41 0.14 0.13 0.13 0.00 0.03 0.03 0.01 0.02
seeing 0.77 -0.33 0.28 0.07 0.12 0.04 -0.05 -0.01 0.03 -0.01 -0.01
temperature 0.65 -0.31 0.41 0.05 0.18 0.05 0.03 0.04 -0.01 0.02 -0.07
odors 0.79 -0.25 0.17 0.03 0.16 -0.04 0.05 -0.15 0.05 -0.02 -0.08
depth 0.71 -0.03 0.39 -0.11 0.03 -0.04 -0.10 0.03 0.11 0.08 -0.05
computations 0.22 0.57 0.46 0.16 0.03 0.06 -0.06 0.06 0.05 0.09 0.05
thoughts 0.85 0.00 -0.10 -0.08 -0.14 0.14 0.21 -0.21 0.05 -0.03 0.01
reasoning 0.73 0.36 0.22 -0.13 -0.10 0.01 0.07 -0.10 0.01 0.05 -0.01
remembering 0.75 0.06 0.42 0.12 -0.12 -0.10 -0.06 -0.08 0.04 0.01 0.02
beliefs 0.66 0.54 -0.11 -0.12 0.07 0.16 0.07 0.00 0.05 0.07 -0.02
hungry 0.78 -0.44 -0.15 -0.13 0.16 0.03 -0.02 -0.02 -0.02 -0.02 0.06
tired 0.85 -0.37 -0.15 0.03 0.06 -0.03 0.00 -0.02 -0.04 0.01 0.03
pain 0.81 -0.43 -0.17 -0.02 0.19 0.03 0.01 -0.08 -0.03 -0.05 0.07
nauseated 0.82 -0.12 -0.18 0.10 0.03 -0.13 -0.02 -0.04 0.05 0.10 -0.03
safe 0.85 -0.22 -0.11 -0.08 -0.04 0.02 0.03 0.21 -0.06 0.04 0.00
love 0.84 0.05 -0.26 0.15 -0.12 0.09 -0.03 0.02 0.00 -0.03 -0.01
recognizing 0.79 -0.04 0.24 0.33 -0.09 0.05 -0.01 -0.02 -0.01 0.02 0.09
communicating 0.75 -0.08 0.40 0.13 -0.15 0.03 0.12 0.12 -0.13 -0.18 -0.01
guilt 0.74 0.47 -0.18 0.09 0.14 -0.03 0.04 0.00 0.05 0.01 0.09
disrespected 0.73 0.43 -0.12 0.02 0.18 -0.04 0.01 0.07 -0.05 -0.11 0.01
free_will 0.82 -0.07 -0.04 -0.28 -0.07 0.02 -0.14 -0.02 0.04 -0.06 -0.04
choices 0.79 -0.03 0.33 -0.16 -0.07 -0.07 -0.08 0.01 -0.04 0.00 0.00
self_restraint 0.75 0.38 0.10 -0.09 0.05 -0.21 0.00 -0.06 -0.23 0.08 0.10
intentions 0.81 0.03 0.06 -0.26 -0.04 -0.07 0.00 0.11 0.13 0.01 -0.01
goal 0.67 0.10 0.32 -0.24 -0.09 -0.11 0.21 0.05 0.01 -0.05 0.05
conscious 0.82 -0.15 -0.06 -0.13 -0.03 0.10 0.08 -0.01 -0.04 0.02 0.06
self_aware 0.77 0.21 0.02 -0.24 -0.07 0.13 -0.23 -0.08 -0.01 -0.07 0.15
desires 0.87 -0.10 -0.12 -0.09 -0.08 -0.08 0.09 0.06 0.06 0.05 -0.10
embarrassed 0.70 0.50 -0.20 0.08 0.21 0.02 0.09 0.11 0.15 -0.03 0.09
emo_recog 0.77 0.34 -0.02 0.09 0.02 0.01 -0.09 -0.01 -0.04 -0.12 -0.05
joy 0.89 -0.04 -0.23 0.14 -0.15 0.02 0.02 -0.01 -0.03 0.10 0.00
morality 0.70 0.53 -0.01 -0.02 0.12 0.11 0.00 -0.08 -0.19 0.07 -0.19
personality 0.89 0.00 -0.12 0.14 -0.17 0.04 -0.02 -0.02 0.04 -0.07 -0.05
pleasure 0.90 -0.22 -0.15 0.03 -0.04 -0.04 -0.03 -0.03 0.05 0.07 0.01
pride 0.81 0.32 -0.16 -0.03 -0.03 0.01 -0.08 0.08 0.03 -0.08 -0.12
MR12 MR13 h2 u2 com
happy 0.01 -0.05 0.91 0.090 1.4
depressed 0.07 0.11 0.82 0.183 1.5
fear -0.03 0.06 0.88 0.117 1.5
angry -0.08 -0.08 0.82 0.181 1.2
calm 0.02 0.08 0.83 0.175 1.3
sounds -0.04 0.04 0.83 0.170 2.4
seeing -0.09 -0.06 0.82 0.183 1.8
temperature 0.18 -0.03 0.77 0.229 2.7
odors 0.00 -0.03 0.79 0.213 1.5
depth 0.11 -0.02 0.71 0.290 1.9
computations 0.02 0.05 0.64 0.360 2.6
thoughts 0.03 0.13 0.88 0.116 1.5
reasoning -0.05 -0.08 0.76 0.241 1.9
remembering -0.07 0.14 0.82 0.180 1.9
beliefs 0.02 0.01 0.81 0.193 2.3
hungry -0.05 0.00 0.88 0.120 1.9
tired -0.01 -0.04 0.90 0.104 1.5
pain 0.01 0.01 0.92 0.078 1.8
nauseated 0.08 -0.01 0.77 0.233 1.3
safe 0.00 0.13 0.86 0.141 1.4
love 0.06 -0.08 0.83 0.167 1.4
recognizing -0.05 -0.05 0.82 0.180 1.7
communicating 0.00 -0.02 0.85 0.153 2.1
guilt -0.04 0.01 0.84 0.163 2.0
disrespected -0.04 -0.06 0.80 0.204 2.0
free_will -0.03 0.07 0.79 0.206 1.4
choices -0.12 0.02 0.79 0.213 1.6
self_restraint 0.06 -0.01 0.85 0.153 2.1
intentions -0.07 -0.04 0.77 0.230 1.4
goal 0.04 -0.07 0.70 0.297 2.3
conscious 0.04 -0.05 0.73 0.266 1.2
self_aware 0.08 -0.04 0.82 0.185 1.8
desires -0.01 -0.07 0.84 0.163 1.2
embarrassed -0.04 0.03 0.89 0.109 2.5
emo_recog 0.07 0.00 0.75 0.250 1.6
joy -0.05 -0.03 0.90 0.103 1.3
morality -0.09 0.01 0.88 0.117 2.5
personality 0.06 0.03 0.86 0.135 1.2
pleasure -0.01 -0.02 0.89 0.113 1.2
pride 0.02 0.00 0.81 0.189 1.5
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11 MR12
SS loadings 24.49 3.38 2.06 0.74 0.48 0.31 0.27 0.24 0.21 0.17 0.16 0.15
Proportion Var 0.61 0.08 0.05 0.02 0.01 0.01 0.01 0.01 0.01 0.00 0.00 0.00
Cumulative Var 0.61 0.70 0.75 0.77 0.78 0.79 0.79 0.80 0.80 0.81 0.81 0.82
Proportion Explained 0.75 0.10 0.06 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.00
Cumulative Proportion 0.75 0.85 0.91 0.93 0.95 0.96 0.97 0.97 0.98 0.99 0.99 1.00
MR13
SS loadings 0.14
Proportion Var 0.00
Cumulative Var 0.82
Proportion Explained 0.00
Cumulative Proportion 1.00
Mean item complexity = 1.7
Test of the hypothesis that 13 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 52.07 with Chi Square of 21651.8
The degrees of freedom for the model are 338 and the objective function was 1.29
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.01
The harmonic number of observations is 431 with the empirical chi square 34.49 with prob < 1
The total number of observations was 431 with Likelihood Chi Square = 526.8 with prob < 2e-10
Tucker Lewis Index of factoring reliability = 0.979
RMSEA index = 0.039 and the 90 % confidence intervals are 0.03 0.042
BIC = -1523.55
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3 MR4 MR5 MR6 MR7
Correlation of scores with factors 1.00 0.98 0.96 0.89 0.88 0.80 0.77
Multiple R square of scores with factors 0.99 0.96 0.92 0.80 0.77 0.64 0.60
Minimum correlation of possible factor scores 0.99 0.91 0.83 0.60 0.55 0.28 0.19
MR8 MR9 MR10 MR11 MR12 MR13
Correlation of scores with factors 0.79 0.76 0.71 0.72 0.66 0.67
Multiple R square of scores with factors 0.62 0.59 0.51 0.51 0.44 0.45
Minimum correlation of possible factor scores 0.24 0.17 0.01 0.03 -0.12 -0.10
[1] 3
Step 2: Run EFA with varimax rotation
Factor Analysis using method = minres
Call: fa(r = d4_all, nfactors = nfactors_d4_all, rotate = chosenRotType,
fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 h2 u2 com
happy 0.74 0.48 0.23 0.84 0.16 1.9
depressed 0.52 0.62 0.23 0.70 0.30 2.2
fear 0.83 0.20 0.37 0.86 0.14 1.5
angry 0.68 0.46 0.31 0.76 0.24 2.2
calm 0.75 0.35 0.32 0.79 0.21 1.8
sounds 0.45 0.08 0.75 0.76 0.24 1.7
seeing 0.56 0.13 0.67 0.78 0.22 2.0
temperature 0.40 0.06 0.71 0.68 0.32 1.6
odors 0.58 0.22 0.58 0.72 0.28 2.3
depth 0.29 0.32 0.68 0.65 0.35 1.8
computations -0.40 0.51 0.39 0.58 0.42 2.8
thoughts 0.60 0.49 0.33 0.72 0.28 2.5
reasoning 0.17 0.66 0.48 0.70 0.30 2.0
remembering 0.26 0.41 0.71 0.74 0.26 1.9
beliefs 0.19 0.83 0.14 0.74 0.26 1.2
hungry 0.84 0.11 0.33 0.83 0.17 1.3
tired 0.85 0.21 0.36 0.89 0.11 1.5
pain 0.86 0.14 0.33 0.87 0.13 1.3
nauseated 0.70 0.40 0.27 0.71 0.29 1.9
safe 0.74 0.32 0.36 0.78 0.22 1.9
love 0.65 0.56 0.18 0.77 0.23 2.1
recognizing 0.43 0.38 0.59 0.67 0.33 2.6
communicating 0.35 0.30 0.71 0.71 0.29 1.8
guilt 0.31 0.82 0.13 0.79 0.21 1.3
disrespected 0.30 0.78 0.18 0.73 0.27 1.4
free_will 0.60 0.42 0.38 0.68 0.32 2.6
choices 0.38 0.37 0.67 0.73 0.27 2.2
self_restraint 0.24 0.71 0.38 0.70 0.30 1.8
intentions 0.49 0.47 0.44 0.66 0.34 3.0
goal 0.23 0.41 0.57 0.55 0.45 2.2
conscious 0.65 0.35 0.38 0.69 0.31 2.2
self_aware 0.38 0.60 0.35 0.63 0.37 2.4
desires 0.69 0.43 0.34 0.78 0.22 2.2
embarrassed 0.29 0.82 0.09 0.77 0.23 1.3
emo_recog 0.33 0.72 0.30 0.71 0.29 1.8
joy 0.72 0.51 0.25 0.84 0.16 2.1
morality 0.17 0.81 0.25 0.74 0.26 1.3
personality 0.64 0.52 0.33 0.80 0.20 2.5
pleasure 0.79 0.35 0.35 0.87 0.13 1.8
pride 0.43 0.74 0.20 0.78 0.22 1.8
MR1 MR2 MR3
SS loadings 12.24 10.06 7.40
Proportion Var 0.31 0.25 0.19
Cumulative Var 0.31 0.56 0.74
Proportion Explained 0.41 0.34 0.25
Cumulative Proportion 0.41 0.75 1.00
Mean item complexity = 1.9
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 52.07 with Chi Square of 21651.8
The degrees of freedom for the model are 663 and the objective function was 5.44
The root mean square of the residuals (RMSR) is 0.02
The df corrected root mean square of the residuals is 0.03
The harmonic number of observations is 431 with the empirical chi square 406.4 with prob < 1
The total number of observations was 431 with Likelihood Chi Square = 2251.71 with prob < 1e-171
Tucker Lewis Index of factoring reliability = 0.91
RMSEA index = 0.077 and the 90 % confidence intervals are 0.071 0.078
BIC = -1770.12
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3
Correlation of scores with factors 0.98 0.97 0.95
Multiple R square of scores with factors 0.95 0.95 0.91
Minimum correlation of possible factor scores 0.91 0.90 0.81
back to TOC
Big factor loadings table for all studies (Studies 1-4)
Joining, by = "mc"
Joining, by = "mc"
Joining, by = "mc"
LS0tCnRpdGxlOiAiQm9keSwgSGVhcnQsICYgTWluZCAoV2Vpc21hbiwgRHdlY2ssICYgTWFya21hbiwgc3VibWl0dGVkKSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogZmxhdGx5CiAgICB0b2M6IHllcwogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogeWVzCi0tLQoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpCmBgYAoKIyBTZXR1cAoKYGBge3Igd29ya3NwYWNlIHNldHVwfQojIGxvYWQgbGlicmFyaWVzCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KGxhbmdjb2cpICMgc291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vbGFuZ2NvZy9sYW5nY29nCmxpYnJhcnkocm1zKQpsaWJyYXJ5KHNjYXR0ZXJwbG90M2QpCmxpYnJhcnkobGF0dGljZSkKbGlicmFyeShkaXJlY3RsYWJlbHMpCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKCiMgY2xlYXIgd29ya3NwYWNlCiMgcm0obGlzdCA9IGxzKGFsbCA9IFQpKQojIGdyYXBoaWNzLm9mZigpCmBgYAoKYGBge3IgZnVuY3Rpb25zfQojIG1ha2Ugcm91bmRpbmcgZnVuY3Rpb24Kcm91bmQyIDwtIGZ1bmN0aW9uKHgpIHtmb3JtYXQocm91bmQoeCwgMiksIG5zbWFsbCA9IDIpfQoKIyBtYWtlIGNsZWFudXAgZnVuY3Rpb24KY2xlYW51cCA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIpKSB7CiAgICAKICAgICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkX3Jhd19zdHVkeTF9CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkX3Jhd19zdHVkeTJ9CiAgICAKICAgICMgZW5hY3QgZXhjbHVzaW9uYXJ5IGNyaXRlcmlhCiAgICBkX2NsZWFuXzEgPC0gZCAlPiUKICAgICAgbXV0YXRlKGZpbmlzaGVkX21vZCA9IGlmZWxzZShpcy5uYShDQVRDSCksIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGZpbmlzaGVkID09IDEsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNSkpKSAlPiUKICAgICAgZmlsdGVyKENBVENIID09IDEsICMgZXhjbHVkZSBQcyB3aG8gZmFpbCBjYXRjaCB0cmlhbHMgCiAgICAgICAgICAgICBmaW5pc2hlZF9tb2QgIT0gMCkgJT4lICMgZXhjbHVkZSBQcyB3aG8gZGlkIG5vdCBjb21wbGV0ZSB0YXNrCiAgICAgIG11dGF0ZSh5b2JfY29ycmVjdCA9IGFzLm51bWVyaWMoCiAgICAgICAgaWZlbHNlKGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpID4gMTkwMCAmIAogICAgICAgICAgICAgICAgIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpIDwgMjAwMCwgCiAgICAgICAgICAgICAgIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpLCBOQSkpLCAjIGNvcnJlY3QgZm9ybWF0dGluZyBpbiB5b2IKICAgICAgICBhZ2VfYXBwcm94ID0gMjAxNiAtIHlvYl9jb3JyZWN0KSAlPiUgIyBjYWxjdWxhdGUgYXBwcm94aW1hdGUgYWdlCiAgICAgIG11dGF0ZShnZW5kZXIgPSBmYWN0b3IoZ2VuZGVyLCBsZXZlbHMgPSBjKDEsIDIsIDApLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJtIiwgImYiLCAib3RoZXIiKSkpICU+JQogICAgICBmaWx0ZXIoYWdlX2FwcHJveCA+PSAxOCkgIyBleGNsdWRlIFBzIHdobyBhcmUgeW91bmdlciB0aGFuIDE4IHllYXJzCiAgICAKICAgICMgcmVjb2RlIGJhY2tncm91bmQgYW5kIGRlbW9ncmFwaGljIHZhcmlhYmxlcwogICAgZF9jbGVhbiA8LSBkX2NsZWFuXzEgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgbnVtYmVyCiAgICAgICAgc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCBzdHVkeSBkdXJhdGlvbgogICAgICAgIGR1cmF0aW9uID0gYXMubnVtZXJpYyhkaWZmdGltZShzdHJwdGltZShlbmRfdGltZSwgIiVJOiVNOiVTIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnB0aW1lKHN0YXJ0X3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cyA9ICJtaW5zIikpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCByYWNlCiAgICAgICAgcmFjZV9hc2lhbl9lYXN0ID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fZWFzdCksICIiLCAiYXNpYW5fZWFzdCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9zb3V0aCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX3NvdXRoKSwgIiIsICJhc2lhbl9zb3V0aCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX290aGVyKSwgIiIsICJhc2lhbl9vdGhlciAiKSksCiAgICAgICAgcmFjZV9ibGFjayA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2JsYWNrKSwgIiIsICJibGFjayAiKSksCiAgICAgICAgcmFjZV9oaXNwYW5pYyA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2hpc3BhbmljKSwgIiIsICJoaXNwYW5pYyAiKSksCiAgICAgICAgcmFjZV9taWRkbGVfZWFzdGVybiA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX21pZGRsZV9lYXN0ZXJuKSwgIiIsICJtaWRkbGVfZWFzdGVybiAiKSksCiAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9uYXRpdmVfYW1lcmljYW4pLCAiIiwgIm5hdGl2ZV9hbWVyaWNhbiAiKSksCiAgICAgICAgcmFjZV9wYWNfaXNsYW5kZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9wYWNfaXNsYW5kZXIpLCAiIiwgInBhY19pc2xhbmRlciAiKSksCiAgICAgICAgcmFjZV93aGl0ZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX3doaXRlKSwgIiIsICJ3aGl0ZSAiKSksCiAgICAgICAgcmFjZV9vdGhlcl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9vdGhlcl9wcmVmbm8pLCAiIiwgIm90aGVyX3ByZWZubyAiKSksCiAgICAgICAgcmFjZV9jYXQgPSBwYXN0ZTAocmFjZV9hc2lhbl9lYXN0LCByYWNlX2FzaWFuX3NvdXRoLCByYWNlX2FzaWFuX290aGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfYmxhY2ssIHJhY2VfaGlzcGFuaWMsIHJhY2VfbWlkZGxlX2Vhc3Rlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4sIHJhY2VfcGFjX2lzbGFuZGVyLCByYWNlX3doaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vKSwKICAgICAgICByYWNlX2NhdDIgPSBmYWN0b3Ioc3ViKCIgKyQiLCAiIiwgcmFjZV9jYXQpKSwKICAgICAgICByYWNlX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmFjZV9jYXQyKSA9PSBULCAibXVsdGlyYWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJhY2VfY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkOmVuZF90aW1lLCBkdXJhdGlvbiwgZmluaXNoZWQ6Z2VuZGVyLCAKICAgICAgICAgICAgIHJlbGlnaW9uX2J1ZGRoaXNtOmFnZV9hcHByb3gsIHJhY2VfY2F0MykgJT4lCiAgICAgIHJlbmFtZShyYWNlX2NhdCA9IHJhY2VfY2F0MykgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmVsaWdpb24KICAgICAgICByZWxpZ2lvbl9idWRkaGlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9idWRkaGlzbSksICIiLCAiYnVkZGhpc20gIikpLAogICAgICAgIHJlbGlnaW9uX2NocmlzdGlhbml0eSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9jaHJpc3RpYW5pdHkpLCAiIiwgImNocmlzdGlhbml0eSAiKSksCiAgICAgICAgcmVsaWdpb25faGluZHVpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25faGluZHVpc20pLCAiIiwgImhpbmR1aXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9pc2xhbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9pc2xhbSksICIiLCAiaXNsYW0gIikpLAogICAgICAgIHJlbGlnaW9uX2phaW5pc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25famFpbmlzbSksICIiLCAiamFpbmlzbSAiKSksCiAgICAgICAgcmVsaWdpb25fanVkYWlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9qdWRhaXNtKSwgIiIsICJqdWRhaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9zaWtoaXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX3Npa2hpc20pLCAiIiwgInNpa2hpc20gIikpLAogICAgICAgIHJlbGlnaW9uX290aGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX290aGVyKSwgIiIsICJvdGhlciAiKSksCiAgICAgICAgcmVsaWdpb25fbm9uZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9ub25lKSwgIiIsICJub25lICIpKSwKICAgICAgICByZWxpZ2lvbl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fcHJlZm5vKSwgIiIsICJvdGhlcl9wcmVmbm8gIikpLAogICAgICAgIHJlbGlnaW9uX2NhdCA9IHBhc3RlMChyZWxpZ2lvbl9idWRkaGlzbSwgcmVsaWdpb25fY2hyaXN0aWFuaXR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25faGluZHVpc20sIHJlbGlnaW9uX2lzbGFtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25famFpbmlzbSwgcmVsaWdpb25fanVkYWlzbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX3Npa2hpc20sIHJlbGlnaW9uX290aGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25fbm9uZSwgcmVsaWdpb25fcHJlZm5vKSwKICAgICAgICByZWxpZ2lvbl9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIHJlbGlnaW9uX2NhdCkpLAogICAgICAgIHJlbGlnaW9uX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmVsaWdpb25fY2F0MikgPT0gVCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcmVsaWdpb3VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocmVsaWdpb25fY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHk6Z2VuZGVyLCBmZWVkYmFjazpyYWNlX2NhdCwgcmVsaWdpb25fY2F0MykgJT4lCiAgICAgIHJlbmFtZShyZWxpZ2lvbl9jYXQgPSByZWxpZ2lvbl9jYXQzKQogICAgCiAgICAjIHJlbW92ZSBleHRyYW5lb3VzIGRmcyBhbmQgdmFyaWFibGVzCiAgICBybShkLCBkX2NsZWFuXzEpCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKSB7CiAgICAKICAgICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgICBkIDwtIGRfcmF3X3N0dWR5MwogICAgCiAgICAjIGVuYWN0IGV4Y2x1c2lvbmFyeSBjcml0ZXJpYQogICAgZF9jbGVhbl8xIDwtIGQgJT4lCiAgICAgIG11dGF0ZShmaW5pc2hlZF9tb2QgPSBpZmVsc2UoaXMubmEoQ0FUQ0guLmNoYXJhY3RlckwpIHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcy5uYShDQVRDSC4uY2hhcmFjdGVyUiksIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGZpbmlzaGVkID09IDEsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNSkpKSAlPiUKICAgICAgZmlsdGVyKENBVENILi5jaGFyYWN0ZXJMID09IDUsICMgZXhjbHVkZSBQcyB3aG8gZmFpbCBjYXRjaCB0cmlhbHMgCiAgICAgICAgICAgICBDQVRDSC4uY2hhcmFjdGVyUiA9PSA1LAogICAgICAgICAgICAgZmluaXNoZWRfbW9kICE9IDApICU+JSAjIGV4Y2x1ZGUgUHMgd2hvIGRpZCBub3QgY29tcGxldGUgdGFzawogICAgICBtdXRhdGUoeW9iX2NvcnJlY3QgPSBhcy5udW1lcmljKAogICAgICAgIGlmZWxzZShhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA+IDE5MDAgJiAKICAgICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA8IDIwMDAsIAogICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSwgTkEpKSwgIyBjb3JyZWN0IGZvcm1hdHRpbmcgaW4geW9iCiAgICAgICAgYWdlX2FwcHJveCA9IDIwMTYgLSB5b2JfY29ycmVjdCkgJT4lICMgY2FsY3VsYXRlIGFwcHJveGltYXRlIGFnZQogICAgICBtdXRhdGUoZ2VuZGVyID0gZmFjdG9yKGdlbmRlciwgbGV2ZWxzID0gYygxLCAyLCAwKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygibSIsICJmIiwgIm90aGVyIikpKSAlPiUKICAgICAgZmlsdGVyKGFnZV9hcHByb3ggPj0gMTgpICMgZXhjbHVkZSBQcyB3aG8gYXJlIHlvdW5nZXIgdGhhbiAxOCB5ZWFycwogICAgCiAgICAjIHJlY29kZSBiYWNrZ3JvdW5kIGFuZCBkZW1vZ3JhcGhpYyB2YXJpYWJsZXMKICAgIGRfY2xlYW5fMiA8LSBkX2NsZWFuXzEgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgbnVtYmVyCiAgICAgICAgc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCBzdHVkeSBkdXJhdGlvbgogICAgICAgIGR1cmF0aW9uID0gYXMubnVtZXJpYyhkaWZmdGltZShzdHJwdGltZShlbmRfdGltZSwgIiVJOiVNOiVTIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnB0aW1lKHN0YXJ0X3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cyA9ICJtaW5zIikpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCByYWNlCiAgICAgICAgcmFjZV9hc2lhbl9lYXN0ID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fZWFzdCksICIiLCAiYXNpYW5fZWFzdCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9zb3V0aCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX3NvdXRoKSwgIiIsICJhc2lhbl9zb3V0aCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX290aGVyKSwgIiIsICJhc2lhbl9vdGhlciAiKSksCiAgICAgICAgcmFjZV9ibGFjayA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2JsYWNrKSwgIiIsICJibGFjayAiKSksCiAgICAgICAgcmFjZV9oaXNwYW5pYyA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2hpc3BhbmljKSwgIiIsICJoaXNwYW5pYyAiKSksCiAgICAgICAgcmFjZV9taWRkbGVfZWFzdGVybiA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX21pZGRsZV9lYXN0ZXJuKSwgIiIsICJtaWRkbGVfZWFzdGVybiAiKSksCiAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9uYXRpdmVfYW1lcmljYW4pLCAiIiwgIm5hdGl2ZV9hbWVyaWNhbiAiKSksCiAgICAgICAgcmFjZV9wYWNfaXNsYW5kZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9wYWNfaXNsYW5kZXIpLCAiIiwgInBhY19pc2xhbmRlciAiKSksCiAgICAgICAgcmFjZV93aGl0ZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX3doaXRlKSwgIiIsICJ3aGl0ZSAiKSksCiAgICAgICAgcmFjZV9vdGhlcl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9vdGhlcl9wcmVmbm8pLCAiIiwgIm90aGVyX3ByZWZubyAiKSksCiAgICAgICAgcmFjZV9jYXQgPSBwYXN0ZTAocmFjZV9hc2lhbl9lYXN0LCByYWNlX2FzaWFuX3NvdXRoLCByYWNlX2FzaWFuX290aGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfYmxhY2ssIHJhY2VfaGlzcGFuaWMsIHJhY2VfbWlkZGxlX2Vhc3Rlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4sIHJhY2VfcGFjX2lzbGFuZGVyLCByYWNlX3doaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vKSwKICAgICAgICByYWNlX2NhdDIgPSBmYWN0b3Ioc3ViKCIgKyQiLCAiIiwgcmFjZV9jYXQpKSwKICAgICAgICByYWNlX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmFjZV9jYXQyKSA9PSBULCAibXVsdGlyYWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJhY2VfY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkOmVuZF90aW1lLCBkdXJhdGlvbiwgZmluaXNoZWQ6Z2VuZGVyLCAKICAgICAgICAgICAgIHJlbGlnaW9uX2J1ZGRoaXNtOmFnZV9hcHByb3gsIHJhY2VfY2F0MykgJT4lCiAgICAgIHJlbmFtZShyYWNlX2NhdCA9IHJhY2VfY2F0MykgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmVsaWdpb24KICAgICAgICByZWxpZ2lvbl9idWRkaGlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9idWRkaGlzbSksICIiLCAiYnVkZGhpc20gIikpLAogICAgICAgIHJlbGlnaW9uX2NocmlzdGlhbml0eSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9jaHJpc3RpYW5pdHkpLCAiIiwgImNocmlzdGlhbml0eSAiKSksCiAgICAgICAgcmVsaWdpb25faGluZHVpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25faGluZHVpc20pLCAiIiwgImhpbmR1aXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9pc2xhbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9pc2xhbSksICIiLCAiaXNsYW0gIikpLAogICAgICAgIHJlbGlnaW9uX2phaW5pc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25famFpbmlzbSksICIiLCAiamFpbmlzbSAiKSksCiAgICAgICAgcmVsaWdpb25fanVkYWlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9qdWRhaXNtKSwgIiIsICJqdWRhaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9zaWtoaXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX3Npa2hpc20pLCAiIiwgInNpa2hpc20gIikpLAogICAgICAgIHJlbGlnaW9uX290aGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX290aGVyKSwgIiIsICJvdGhlciAiKSksCiAgICAgICAgcmVsaWdpb25fbm9uZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9ub25lKSwgIiIsICJub25lICIpKSwKICAgICAgICByZWxpZ2lvbl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fcHJlZm5vKSwgIiIsICJvdGhlcl9wcmVmbm8gIikpLAogICAgICAgIHJlbGlnaW9uX2NhdCA9IHBhc3RlMChyZWxpZ2lvbl9idWRkaGlzbSwgcmVsaWdpb25fY2hyaXN0aWFuaXR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25faGluZHVpc20sIHJlbGlnaW9uX2lzbGFtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25famFpbmlzbSwgcmVsaWdpb25fanVkYWlzbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX3Npa2hpc20sIHJlbGlnaW9uX290aGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWdpb25fbm9uZSwgcmVsaWdpb25fcHJlZm5vKSwKICAgICAgICByZWxpZ2lvbl9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIHJlbGlnaW9uX2NhdCkpLAogICAgICAgIHJlbGlnaW9uX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmVsaWdpb25fY2F0MikgPT0gVCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcmVsaWdpb3VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocmVsaWdpb25fY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHk6Z2VuZGVyLCBmZWVkYmFjazpyYWNlX2NhdCwgcmVsaWdpb25fY2F0MykgJT4lCiAgICAgIHJlbmFtZShyZWxpZ2lvbl9jYXQgPSByZWxpZ2lvbl9jYXQzKQogICAgCiAgICAjIHJlbmFtZSByZXNwb25zZSB2YXJpYWJsZXMKICAgIGRfY2xlYW5fMyA8LSBkX2NsZWFuXzIKICAgIG5hbWVzKGRfY2xlYW5fMykgPC0gZ3N1YigiZ2V0IiwgIiIsIG5hbWVzKGRfY2xlYW5fMykpCiAgICBuYW1lcyhkX2NsZWFuXzMpIDwtIGdzdWIoIlxcLiIsICIiLCBuYW1lcyhkX2NsZWFuXzMpKQogICAgbmFtZXMoZF9jbGVhbl8zKSA8LSBnc3ViKCJjaGFyIiwgIl9jaGFyIiwgbmFtZXMoZF9jbGVhbl8zKSkKICAgIG5hbWVzKGRfY2xlYW5fMylbbmFtZXMoZF9jbGVhbl8zKSAlaW4lIGMoIl9jaGFyYWN0ZXJMIiwgIl9jaGFyYWN0ZXJSIildIDwtIAogICAgICBjKCJjaGFyYWN0ZXJMIiwgImNoYXJhY3RlclIiKQogICAgCiAgICAjIHJlY29kZSByZXNwb25zZSB2YXJpYWJsZXMgKGNlbnRlcikKICAgIGRfY2xlYW5fNCA8LSBkX2NsZWFuXzMKICAgIGZvcihpIGluIDExOjkyKSB7CiAgICAgIGRfY2xlYW5fNFssaV0gPC0gZF9jbGVhbl80WyxpXSAtIDQgIyB0cmFuc2Zvcm0gZnJvbSAxIHRvIDcgLS0+IC0zIHRvIDMKICAgIH0KICAgIAogICAgIyByZWNvZGUgY2hhcmFjdGVyTCB2cy4gY2hhcmFjdGVyUiBhcyBiZWV0bGUgdnMuIHJvYm90CiAgICBkX2NsZWFuXzVfZGVtbyA8LSBkX2NsZWFuXzQgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHk6Y29uZGl0aW9uLCB5b2I6cmVsaWdpb25fY2F0KQogICAgCiAgICBkX2NsZWFuXzVfY2hhcmFjdGVyTCA8LSBkX2NsZWFuXzQgJT4lCiAgICAgIG11dGF0ZSh0YXJnZXQgPSBjaGFyYWN0ZXJMKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQsIHRhcmdldCwgaGFwcHlfY2hhcmFjdGVyTDpDQVRDSF9jaGFyYWN0ZXJMKQogICAgbmFtZXMoZF9jbGVhbl81X2NoYXJhY3RlckwpIDwtIGdzdWIoIl9jaGFyYWN0ZXJMIiwgIiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMoZF9jbGVhbl81X2NoYXJhY3RlckwpKQogICAgCiAgICBkX2NsZWFuXzVfY2hhcmFjdGVyUiA8LSBkX2NsZWFuXzQgJT4lCiAgICAgIG11dGF0ZSh0YXJnZXQgPSBjaGFyYWN0ZXJSKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQsIHRhcmdldCwgaGFwcHlfY2hhcmFjdGVyUjpDQVRDSF9jaGFyYWN0ZXJSKQogICAgbmFtZXMoZF9jbGVhbl81X2NoYXJhY3RlclIpIDwtIGdzdWIoIl9jaGFyYWN0ZXJSIiwgIiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMoZF9jbGVhbl81X2NoYXJhY3RlclIpKQogICAgCiAgICBkX2NsZWFuIDwtIGRfY2xlYW5fNV9jaGFyYWN0ZXJMICU+JQogICAgICBmdWxsX2pvaW4oZF9jbGVhbl81X2NoYXJhY3RlclIpICU+JQogICAgICBmdWxsX2pvaW4oZF9jbGVhbl81X2RlbW8pICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5LCBzdWJpZCwgZGF0ZTpyZWxpZ2lvbl9jYXQsIHRhcmdldDpDQVRDSCkKICAgIAogICAgIyByZW1vdmUgZXh0cmFuZW91cyBkZnMgYW5kIHZhcmlhYmxlcwogICAgcm0oZCwgZF9jbGVhbl8xLCBkX2NsZWFuXzIsIGRfY2xlYW5fMywgZF9jbGVhbl80LCBkX2NsZWFuXzVfY2hhcmFjdGVyTCwgCiAgICAgICBkX2NsZWFuXzVfY2hhcmFjdGVyUiwgZF9jbGVhbl81X2RlbW8sIGkpCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKSB7CiAgICAKICAgICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgICBkIDwtIGRfcmF3X3N0dWR5NAoKICAgICAgICAjIGVuYWN0IGV4Y2x1c2lvbmFyeSBjcml0ZXJpYQogICAgZF9jbGVhbl8xIDwtIGQgJT4lCiAgICAgIG11dGF0ZShmaW5pc2hlZF9tb2QgPSBpZmVsc2UoaXMubmEoQ0FUQ0gpLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShmaW5pc2hlZCA9PSAxLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUpKSkgJT4lCiAgICAgIGZpbHRlcihDQVRDSCA9PSAxLCAjIGV4Y2x1ZGUgUHMgd2hvIGZhaWwgY2F0Y2ggdHJpYWxzIAogICAgICAgICAgICAgZmluaXNoZWRfbW9kICE9IDApICU+JSAjIGV4Y2x1ZGUgUHMgd2hvIGRpZCBub3QgY29tcGxldGUgdGFzawogICAgICBtdXRhdGUoeW9iX2NvcnJlY3QgPSBhcy5udW1lcmljKAogICAgICAgIGlmZWxzZShhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA+IDE5MDAgJiAKICAgICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA8IDIwMDAsIAogICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSwgTkEpKSwgIyBjb3JyZWN0IGZvcm1hdHRpbmcgaW4geW9iCiAgICAgICAgYWdlX2FwcHJveCA9IDIwMTYgLSB5b2JfY29ycmVjdCkgJT4lICMgY2FsY3VsYXRlIGFwcHJveGltYXRlIGFnZQogICAgICBtdXRhdGUoZ2VuZGVyID0gZmFjdG9yKGdlbmRlciwgbGV2ZWxzID0gYygxLCAyLCAwKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygibSIsICJmIiwgIm90aGVyIikpKSAlPiUKICAgICAgZmlsdGVyKGFnZV9hcHByb3ggPj0gMTgpICMgZXhjbHVkZSBQcyB3aG8gYXJlIHlvdW5nZXIgdGhhbiAxOCB5ZWFycwogICAgCiAgICAjIHJlY29kZSBvbmUgY2hhcmFjdGVyCiAgICBkX2NsZWFuXzIgPC0gZF9jbGVhbl8xICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZSgKICAgICAgICBncmVwbCgidmVnZXRhdGl2ZSIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwgInB2cyIsCiAgICAgICAgaWZlbHNlKGdyZXBsKCJibHVlIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLCAiYmx1ZWpheSIsCiAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgiY2hpbXAiLCBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSksICJjaGltcCIsCiAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSkpKSkpCgogICAgIyByZWNvZGUgYmFja2dyb3VuZCBhbmQgZGVtb2dyYXBoaWMgdmFyaWFibGVzCiAgICBkX2NsZWFuIDwtIGRfY2xlYW5fMiAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCBzdHVkeSBudW1iZXIKICAgICAgICBzdHVkeSA9IGZhY3RvcihzdHVkeSkpICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHN0dWR5IGR1cmF0aW9uCiAgICAgICAgZHVyYXRpb24gPSBhcy5udW1lcmljKGRpZmZ0aW1lKHN0cnB0aW1lKGVuZF90aW1lLCAiJUk6JU06JVMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RycHRpbWUoc3RhcnRfdGltZSwgIiVJOiVNOiVTIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzID0gIm1pbnMiKSkpICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHJhY2UKICAgICAgICByYWNlX2FzaWFuX2Vhc3QgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9lYXN0KSwgIiIsICJhc2lhbl9lYXN0ICIpKSwKICAgICAgICByYWNlX2FzaWFuX3NvdXRoID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fc291dGgpLCAiIiwgImFzaWFuX3NvdXRoICIpKSwKICAgICAgICByYWNlX2FzaWFuX290aGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fb3RoZXIpLCAiIiwgImFzaWFuX290aGVyICIpKSwKICAgICAgICByYWNlX2JsYWNrID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYmxhY2spLCAiIiwgImJsYWNrICIpKSwKICAgICAgICByYWNlX2hpc3BhbmljID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfaGlzcGFuaWMpLCAiIiwgImhpc3BhbmljICIpKSwKICAgICAgICByYWNlX21pZGRsZV9lYXN0ZXJuID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfbWlkZGxlX2Vhc3Rlcm4pLCAiIiwgIm1pZGRsZV9lYXN0ZXJuICIpKSwKICAgICAgICByYWNlX25hdGl2ZV9hbWVyaWNhbiA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX25hdGl2ZV9hbWVyaWNhbiksICIiLCAibmF0aXZlX2FtZXJpY2FuICIpKSwKICAgICAgICByYWNlX3BhY19pc2xhbmRlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX3BhY19pc2xhbmRlciksICIiLCAicGFjX2lzbGFuZGVyICIpKSwKICAgICAgICByYWNlX3doaXRlID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2Vfd2hpdGUpLCAiIiwgIndoaXRlICIpKSwKICAgICAgICByYWNlX290aGVyX3ByZWZubyA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX290aGVyX3ByZWZubyksICIiLCAib3RoZXJfcHJlZm5vICIpKSwKICAgICAgICByYWNlX2NhdCA9IHBhc3RlMChyYWNlX2FzaWFuX2Vhc3QsIHJhY2VfYXNpYW5fc291dGgsIHJhY2VfYXNpYW5fb3RoZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9ibGFjaywgcmFjZV9oaXNwYW5pYywgcmFjZV9taWRkbGVfZWFzdGVybiwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX25hdGl2ZV9hbWVyaWNhbiwgcmFjZV9wYWNfaXNsYW5kZXIsIHJhY2Vfd2hpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9vdGhlcl9wcmVmbm8pLAogICAgICAgIHJhY2VfY2F0MiA9IGZhY3RvcihzdWIoIiArJCIsICIiLCByYWNlX2NhdCkpLAogICAgICAgIHJhY2VfY2F0MyA9IGZhY3RvcihpZmVsc2UoZ3JlcGwoIiAiLCByYWNlX2NhdDIpID09IFQsICJtdWx0aXJhY2lhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocmFjZV9jYXQyKSkpKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQ6ZW5kX3RpbWUsIGR1cmF0aW9uLCBmaW5pc2hlZDpnZW5kZXIsIAogICAgICAgICAgICAgZWR1Y2F0aW9uOmFnZV9hcHByb3gsIHJhY2VfY2F0MykgJT4lCiAgICAgIHJlbmFtZShyYWNlX2NhdCA9IHJhY2VfY2F0MykKICAgIAogICAgIyBmaWx0ZXIgY29uZGl0aW9ucyBpZiBkZXNpcmVkCiAgICBpZihpcy5lbGVtZW50KCJub25lIiwgY2hvc2VuRXhjbHVkZSkpIHt9IGVsc2UgewogICAgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICAgICAgZmlsdGVyKCFjb25kaXRpb24gJWluJSBjaG9zZW5FeGNsdWRlKQogICAgfQogICAgCiAgICAjIHJlbW92ZSBleHRyYW5lb3VzIGRmcyBhbmQgdmFyaWFibGVzCiAgICBybShkLCBkX2NsZWFuXzEsIGRfY2xlYW5fMikKICB9CiAgCiMgICAjIHRyYW5zZm9ybSB0byAwIHRvIDYgc2NhbGUKIyAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKIyAgICAgZ2F0aGVyKG1jLCBzY29yZSwgaGFwcHk6cHJpZGUpICU+JQojICAgICBtdXRhdGUoc2NvcmUgPSBzY29yZSArIDMpICU+JSAjIHRyYW5zZm9ybSBmcm9tIC0zIHRvIDMgLS0+IDAgdG8gNgojICAgICBzcHJlYWQobWMsIHNjb3JlKQogIAogICMgcmVtb3ZlIG91dGxpZXJzCiAgaWYoY2hvc2VuT3V0bGllckhhbmRsaW5nID09ICJyZW1vdmUiKSB7CiAgICAKICAgIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICAgICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICAgIGdhdGhlcihtYywgc2NvcmUsIGhhcHB5OnByaWRlKSAlPiUKICAgICAgICBncm91cF9ieShjb25kaXRpb24sIG1jKSAlPiUKICAgICAgICBmaWx0ZXIoIXNjb3JlICVpbiUgYm94cGxvdC5zdGF0cyhzY29yZSwgMi41KSRvdXQpICU+JQogICAgICAgIHNwcmVhZChtYywgc2NvcmUpICU+JQogICAgICAgIGFycmFuZ2UoY29uZGl0aW9uLCBzdWJpZCkKICAgIH0KICAgIAogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpIHsKICAgICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICAgIGdhdGhlcihtYywgc2NvcmUsIGhhcHB5OnByaWRlKSAlPiUKICAgICAgICBncm91cF9ieSh0YXJnZXQsIG1jKSAlPiUKICAgICAgICBmaWx0ZXIoIXNjb3JlICVpbiUgYm94cGxvdC5zdGF0cyhzY29yZSwgMi41KSRvdXQpICU+JQogICAgICAgIHNwcmVhZChtYywgc2NvcmUpICU+JQogICAgICAgIGFycmFuZ2UodGFyZ2V0LCBzdWJpZCkKICAgIH0KICAgIAogIH0KICAKICAjIGZpbHRlciBpdGVtcyBpZiBkZXNpcmVkCiAgaWYoaXMuZWxlbWVudCgibm9uZSIsIGNob3NlbkV4Y2x1ZGVJdGVtKSkge30gZWxzZSB7CiAgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoLWNvbnRhaW5zKGNob3NlbkV4Y2x1ZGVJdGVtKSkKICB9CgogICMgcmV0dXJuIGNsZWFuZWQgZGF0YXNldAogIHJldHVybihkX2NsZWFuKQp9CgojIG1ha2UgZnVuY3Rpb24gZm9yIGV4YW1pbmluZyBleGNsdXNpb24gb2YgcGFydGljaXBhbnRzCmV4Y2x1ZGVkQ291bnRzIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKICAKICAjIHNldCBkYXRhc291cmNlCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpewogICAgZCA8LSBkMQogICAgZF9yYXcgPC0gZF9yYXdfc3R1ZHkxCiAgfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXsKICAgIGQgPC0gZDIKICAgIGRfcmF3IDwtIGRfcmF3X3N0dWR5MgogIH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7CiAgICBkIDwtIGQzCiAgICBkX3JhdyA8LSBkX3Jhd19zdHVkeTMKICB9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpewogICAgZCA8LSBkNAogICAgZF9yYXcgPC0gZF9yYXdfc3R1ZHk0CiAgfQogIAogICMgZ2V0IHN1YmlkcyBvZiBzdWNjZXNzZnVsIHBhcnRpY2lwYW50cwogIGRfc3ViaWRzIDwtIGxldmVscyhmYWN0b3IoYXMuY2hhcmFjdGVyKGQkc3ViaWQpKSkKICAKICAjIGdldCBzdWJpZHMgb2YgZXhjbHVkZWQgcGFydGljaXBhbnRzCiAgZF9leGNsdWRlZCA8LSBkX3JhdyAlPiUKICAgIGZpbHRlcihpcy5lbGVtZW50KHN1YmlkLCBkX3N1YmlkcykgPT0gRkFMU0UpICU+JQogICAgZHBseXI6OnNlbGVjdChjb25kaXRpb24sIHN1YmlkLCBmaW5pc2hlZCwgc3RhcnRzX3dpdGgoIkNBVENIIiksIHlvYikKCiAgIyBjb3VudCBleGNsdWRlZCBwYXJ0aWNpcGFudHMKICBkX2V4Y2x1ZGVkX24gPC0gbGVuZ3RoKGRfZXhjbHVkZWQkc3ViaWQpCiAgCiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIsICJzdHVkeSA0IikpIHsKICAgICMgY291bnQgcGFydGljaXBhbnRzIHdobyBkaWQgbm90IGZpbmlzaAogICAgZF9leGNsdWRlZF91bmZpbmlzaGVkIDwtIGRfZXhjbHVkZWQgJT4lCiAgICAgIGZpbHRlcihpcy5uYShDQVRDSCkgPT0gVCwKICAgICAgICAgICAgIGZpbmlzaGVkICE9IDEpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN1YmlkKSAlPiUKICAgICAgYygpCiAgICAKICAgICMgY291bnQgcGFydGljaXBhbnRzIHdobyBmaW5pc2hlZCwgYnV0IGZhaWxlZCBjYXRjaCB0cmlhbAogICAgZF9leGNsdWRlZF9DQVRDSCA8LSBkX2V4Y2x1ZGVkICU+JQogICAgICBmaWx0ZXIoaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF91bmZpbmlzaGVkJHN1YmlkKSA9PSBGQUxTRSkgJT4lCiAgICAgIGZpbHRlcihDQVRDSCAhPSAxKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdWJpZCkgJT4lCiAgICAgIGMoKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIikgewogICAgIyBjb3VudCBwYXJ0aWNpcGFudHMgd2hvIGRpZCBub3QgZmluaXNoCiAgICBkX2V4Y2x1ZGVkX3VuZmluaXNoZWQgPC0gZF9leGNsdWRlZCAlPiUKICAgICAgZmlsdGVyKGlzLm5hKENBVENILi5jaGFyYWN0ZXJMKSA9PSBULAogICAgICAgICAgICAgaXMubmEoQ0FUQ0guLmNoYXJhY3RlclIpID09IFQsCiAgICAgICAgICAgICBmaW5pc2hlZCAhPSAxKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdWJpZCkgJT4lCiAgICAgIGMoKQogICAgCiAgICAjIGNvdW50IHBhcnRpY2lwYW50cyB3aG8gZmluaXNoZWQsIGJ1dCBmYWlsZWQgY2F0Y2ggdHJpYWwKICAgIGRfZXhjbHVkZWRfQ0FUQ0ggPC0gZF9leGNsdWRlZCAlPiUKICAgICAgZmlsdGVyKGlzLmVsZW1lbnQoc3ViaWQsIGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCkgPT0gRkFMU0UpICU+JQogICAgICBmaWx0ZXIoQ0FUQ0guLmNoYXJhY3RlckwgIT0gNSB8IENBVENILi5jaGFyYWN0ZXJSICE9IDUpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN1YmlkKSAlPiUKICAgICAgYygpCiAgfQogIAogICMgY291bnQgcGFydGljaXBhbnRzIHdobyBmaW5pc2hlZCBhbmQgcGFzc2VkIGNhdGNoIHRyaWFsLCAKICAjIGJ1dCBkaWQgbm90IHByb3ZpZGUgeWVhciBvZiBiaXJ0aAogIGRfZXhjbHVkZWRfbm9feW9iIDwtIGRfZXhjbHVkZWQgJT4lCiAgICBmaWx0ZXIoaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF91bmZpbmlzaGVkJHN1YmlkKSA9PSBGQUxTRSwKICAgICAgICAgICBpcy5lbGVtZW50KHN1YmlkLCBkX2V4Y2x1ZGVkX0NBVENIJHN1YmlkKSA9PSBGQUxTRSkgJT4lCiAgICBtdXRhdGUoeW9iID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkpICU+JQogICAgZmlsdGVyKGlzLm5hKHlvYikgfCB5b2IgPCAxODk5IHwgbmNoYXIoYXMuY2hhcmFjdGVyKHlvYikpICE9IDQpICU+JQogICAgZHBseXI6OnNlbGVjdChzdWJpZCkgJT4lCiAgICBjKCkKICAKICAjIGNvdW50IHBhcnRpY2lwYW50cyB3aG8gZmluaXNoZWQgYW5kIHBhc3NlZCBjYXRjaCB0cmlhbCwgCiAgIyBidXQgZGlkIG5vdCBwcm92aWRlIHllYXIgb2YgYmlydGgKICBkX2V4Y2x1ZGVkX3lvdW5nIDwtIGRfZXhjbHVkZWQgJT4lCiAgICBmaWx0ZXIoaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF91bmZpbmlzaGVkJHN1YmlkKSA9PSBGQUxTRSwKICAgICAgICAgICBpcy5lbGVtZW50KHN1YmlkLCBkX2V4Y2x1ZGVkX0NBVENIJHN1YmlkKSA9PSBGQUxTRSwKICAgICAgICAgICBpcy5lbGVtZW50KHN1YmlkLCBkX2V4Y2x1ZGVkX25vX3lvYiRzdWJpZCkgPT0gRkFMU0UpICU+JQogICAgbXV0YXRlKHlvYiA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpKSAlPiUKICAgIGZpbHRlcihpcy5uYSh5b2IpIHwgMjAxNiAtIHlvYiA8IDE4KSAlPiUKICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JQogICAgYygpCiAgCiAgIyBzdW0gdXAgZXhjbHVkZWQgcGFydGljaXBhbnRzIGJ5IGNhdGVnb3J5CiAgdG90YWwgPC0gc3VtKGxlbmd0aChkX2V4Y2x1ZGVkX3VuZmluaXNoZWQkc3ViaWQpLAogICAgICAgICAgICAgICBsZW5ndGgoZF9leGNsdWRlZF9DQVRDSCRzdWJpZCksCiAgICAgICAgICAgICAgIGxlbmd0aChkX2V4Y2x1ZGVkX25vX3lvYiRzdWJpZCksCiAgICAgICAgICAgICAgIGxlbmd0aChkX2V4Y2x1ZGVkX3lvdW5nJHN1YmlkKSkKICAKICAjIGNhbGN1bGF0ZSBjb3VudHMKICBleGNsdWRlZF9jb3VudHMgPC0gCiAgICBkYXRhLmZyYW1lKCJkaWRfbm90X2ZpbmlzaCIgPSBsZW5ndGgoZF9leGNsdWRlZF91bmZpbmlzaGVkJHN1YmlkKSwKICAgICAgICAgICAgICAgImZhaWxlZF9jYXRjaF90cmlhbCIgPSBsZW5ndGgoZF9leGNsdWRlZF9DQVRDSCRzdWJpZCksCiAgICAgICAgICAgICAgICJkaWRfbm90X3Byb3ZpZGVfeW9iIiA9IGxlbmd0aChkX2V4Y2x1ZGVkX25vX3lvYiRzdWJpZCksCiAgICAgICAgICAgICAgICJ0b29feW91bmciID0gbGVuZ3RoKGRfZXhjbHVkZWRfeW91bmckc3ViaWQpLAogICAgICAgICAgICAgICAiVE9UQUxfZXhjbHVkZWQiID0gdG90YWwsCiAgICAgICAgICAgICAgICJUT1RBTF9wYXJ0aWNpcGF0ZWQiID0gbGVuZ3RoKGQkc3ViaWQpLAogICAgICAgICAgICAgICAiT1ZFUkFMTF9UT1RBTCIgPSBzdW0odG90YWwsIGxlbmd0aChkJHN1YmlkKSkpCiAgCiAgaWYodG90YWwgIT0gZF9leGNsdWRlZF9uKSB7CiAgICBzdG9wKCJFcnJvcjogNCBzb3VyY2VzIG9mIGV4Y2x1c2lvbiBkbyBub3QgYWRkIHVwIHRvIHRvdGFsLiIpCiAgICB9IGVsc2UgewogICAgICByZXR1cm4oZXhjbHVkZWRfY291bnRzKQogICAgfQp9CgojIG1ha2UgZnVuY3Rpb24gZm9yIHN0cmlwcGluZyBkYXRhZnJhbWVzIGZvciBkaW1lbnNpb24gcmVkdWNhdGlvbgptYWtlRFJERiA8LSBmdW5jdGlvbihkYXRhc291cmNlLCBjaG9zZW5Db25kaXRpb24pIHsKICAKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXsKICAgICMgcmVuYW1lIHZhcmlhYmxlcyBmb3IgZWFzZSBvZiBmdW5jdGlvbiBhcHBscGljYXRpb24KICAgIGQgPC0gZDMgJT4lCiAgICAgIHJlbmFtZShvcmRlciA9IGNvbmRpdGlvbiwKICAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRhcmdldCkKICAgIAogICAgIyByZW5hbWUgc3ViaWRzIGJ5IGNvbmRpdGlvbiBpZiBjb2xsYXBzZXMgYWNyb3NzIGNvbmRpdGlvbnMKICAgIGQgPC0gZCAlPiUKICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUoY29uZGl0aW9uLCBzdWJpZCwgc2VwID0gIl8iKSkKICB9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CiAgCiAgIyBmaWx0ZXIgYnkgY29uZGl0aW9uIGlmIHNwZWNpZmllZAogIGlmKGNob3NlbkNvbmRpdGlvbiAlaW4lIGMoImJlZXRsZSIsICJyb2JvdCIpKSB7CiAgICBkIDwtIGQgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gY2hvc2VuQ29uZGl0aW9uKQogIH0KICAKICAjIG1ha2Ugc3RyaXBwZWQgZGF0YWZyYW1lIGZvciBkaW1lbnNpb24gcmVkdWNhdGlvbiBhbmFseXNlcwogIGRfc3RyaXAgPC0gZCAlPiUKICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQsIGhhcHB5OnByaWRlKQogIGRfc3RyaXAgPC0gZGF0YS5mcmFtZShkX3N0cmlwWywtMV0sIHJvdy5uYW1lcyA9IGRfc3RyaXAkc3ViaWQpCiAgCiAgIyByZXR1cm4gc3RyaXBwZWQgZGF0YWZyYW1lCiAgcmV0dXJuKGRfc3RyaXApCn0KCiMgbWFrZSBkZW1vZ3JhcGhpY3MgZnVuY3Rpb25zCmRlbW9TYW1wbGVTaXplIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkMX0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7CiAgICAjIHJlbmFtZSB2YXJpYWJsZXMgZm9yIGVhc2Ugb2YgZnVuY3Rpb24gYXBwbHBpY2F0aW9uCiAgICBkIDwtIGQzICU+JQogICAgICByZW5hbWUob3JkZXIgPSBjb25kaXRpb24sCiAgICAgICAgICAgICBjb25kaXRpb24gPSB0YXJnZXQpCiAgfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQoKICAjIGdldCBzYW1wbGUgc2l6ZSBwZXIgY29uZGl0aW9uCiAgc2FtcGxlX3NpemUgPC0gdmVjdG9yKCkKICBmb3IoaSBpbiBsZXZlbHMoZCRjb25kaXRpb24pKSB7CiAgICBzYW1wbGVfc2l6ZVthcy5jaGFyYWN0ZXIoaSldIDwtIAogICAgICBhcy5udW1lcmljKGQgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gaSkgJT4lIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JSAKICAgICAgICAgICAgICAgICAgIHVuaXF1ZSgpICU+JSBjb3VudCgpKQogIH0KCiAgIyBhZGQgdG90YWwgc2FtcGxlIHNpemUgIAogIHNhbXBsZV9zaXplWyJhbGwiXSA8LSBhcy5udW1lcmljKGQgJT4lIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZSgpICU+JSBjb3VudCgpKQogIAogICMgbWFrZSBpbnRvIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICBzYW1wbGVfc2l6ZSA8LSBkYXRhLmZyYW1lKHNhbXBsZV9zaXplKSAlPiUKICAgIHJvd25hbWVzX3RvX2NvbHVtbigpICU+JQogICAgcmVuYW1lKGNvbmRpdGlvbiA9IHJvd25hbWUsCiAgICAgICAgICAgbiA9IHNhbXBsZV9zaXplKQogIAogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICByZXR1cm4oc2FtcGxlX3NpemUpCn0KZGVtb0R1cmF0aW9uIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkMX0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7CiAgICAjIHJlY29kZSB2YXJpYWJsZXMgZm9yIGVhc2Ugb2YgZnVuY3Rpb24gYXBwbHBpY2F0aW9uCiAgICBkIDwtIGQzICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gIndpdGhpbi1zdWJqZWN0cyIpCiAgfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQoKICAjIGdldCBzYW1wbGUgc2l6ZSBwZXIgY29uZGl0aW9uCiAgZHVyYXRpb24gPC0gZCAlPiUKICAgIGdyb3VwX2J5KGNvbmRpdGlvbikgJT4lCiAgICBzdW1tYXJpc2UobWluX2R1cmF0aW9uID0gbWluKGR1cmF0aW9uKSwKICAgICAgICAgICAgICBtYXhfZHVyYXRpb24gPSBtYXgoZHVyYXRpb24pLAogICAgICAgICAgICAgIG1lZGlhbl9kdXJhdGlvbiA9IG1lZGlhbihkdXJhdGlvbiksCiAgICAgICAgICAgICAgbWVhbl9kdXJhdGlvbiA9IG1lYW4oZHVyYXRpb24pLAogICAgICAgICAgICAgIHNkX2R1cmF0aW9uID0gc2QoZHVyYXRpb24pKQoKICAjIGFkZCB0b3RhbCBkdXJhdGlvbgogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICBhbGwgPC0gZCAlPiUKICAgICAgc3VtbWFyaXNlKG1pbl9kdXJhdGlvbiA9IG1pbihkdXJhdGlvbiksCiAgICAgICAgICAgICAgICBtYXhfZHVyYXRpb24gPSBtYXgoZHVyYXRpb24pLAogICAgICAgICAgICAgICAgbWVkaWFuX2R1cmF0aW9uID0gbWVkaWFuKGR1cmF0aW9uKSwKICAgICAgICAgICAgICAgIG1lYW5fZHVyYXRpb24gPSBtZWFuKGR1cmF0aW9uKSwKICAgICAgICAgICAgICAgIHNkX2R1cmF0aW9uID0gc2QoZHVyYXRpb24pKSAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9ICJhbGwiKQogICAgZHVyYXRpb24gPC0gcmJpbmQoZHVyYXRpb24sIGFsbCkgIyBub3Qgc3VyZSB3aHkgZnVsbF9qb2luIGRvZXNuJ3Qgd29yayAgICAKICB9CgogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICByZXR1cm4oZHVyYXRpb24pCn0KZGVtb0FnZSA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpewogICAgIyByZWNvZGUgdmFyaWFibGVzIGZvciBlYXNlIG9mIGZ1bmN0aW9uIGFwcGxwaWNhdGlvbgogICAgZCA8LSBkMyAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9ICJ3aXRoaW4tc3ViamVjdHMiKQogIH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgc2FtcGxlIHNpemUgcGVyIGNvbmRpdGlvbgogIGFnZSA8LSBkICU+JQogICAgZ3JvdXBfYnkoY29uZGl0aW9uKSAlPiUKICAgIHN1bW1hcmlzZShtaW5fYWdlID0gbWluKGFnZV9hcHByb3gpLAogICAgICAgICAgICAgIG1heF9hZ2UgPSBtYXgoYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgbWVkaWFuX2FnZSA9IG1lZGlhbihhZ2VfYXBwcm94KSwKICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgc2RfYWdlID0gc2QoYWdlX2FwcHJveCkpCgogICMgYWRkIHRvdGFsIGFnZQogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICBhbGwgPC0gZCAlPiUKICAgICAgc3VtbWFyaXNlKG1pbl9hZ2UgPSBtaW4oYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgICBtYXhfYWdlID0gbWF4KGFnZV9hcHByb3gpLAogICAgICAgICAgICAgICAgbWVkaWFuX2FnZSA9IG1lZGlhbihhZ2VfYXBwcm94KSwKICAgICAgICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihhZ2VfYXBwcm94KSwKICAgICAgICAgICAgICAgIHNkX2FnZSA9IHNkKGFnZV9hcHByb3gpKSAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9ICJhbGwiKQogICAgYWdlIDwtIGZ1bGxfam9pbihhZ2UsIGFsbCkKICB9CgogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICByZXR1cm4oYWdlKQp9CmRlbW9HZW5kZXIgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQoKICAjIGdldCBnZW5kZXIgcGVyIGNvbmRpdGlvbiBhbmQgb3ZlcmFsbAogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICBnZW5kZXIgPC0gZGF0YS5mcmFtZShhZGRtYXJnaW5zKHdpdGgoZCwgdGFibGUoY29uZGl0aW9uLCBnZW5kZXIpKSkpICU+JQogICAgICBmaWx0ZXIoZ2VuZGVyICE9ICJTdW0iKSAlPiUKICAgICAgcmVuYW1lKG4gPSBGcmVxKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIikgewogICAgZ2VuZGVyIDwtIGRhdGEuZnJhbWUod2l0aChkLCB0YWJsZShnZW5kZXIpKSkgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAiU3VtIikgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoY29uZGl0aW9uLCBnZW5kZXIsIG4pCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgMyIpKSB7CiAgICBnZW5kZXIgPC0gZ2VuZGVyICU+JQogICAgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3RvcihpZmVsc2UoY29uZGl0aW9uID09ICJTdW0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGwiLCBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImJlZXRsZSIsICJyb2JvdCIsICJhbGwiKSkpICU+JQogICAgYXJyYW5nZShjb25kaXRpb24sIGdlbmRlcikgJT4lCiAgICBzcHJlYWQoZ2VuZGVyLCBuKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0IikgewogICAgZ2VuZGVyIDwtIGdlbmRlciAlPiUKICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKGxldmVscyhkJGNvbmRpdGlvbiksICJhbGwiKSkpICU+JQogICAgYXJyYW5nZShjb25kaXRpb24sIGdlbmRlcikgJT4lCiAgICBzcHJlYWQoZ2VuZGVyLCBuKQogIH0KICAKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgcmV0dXJuKGdlbmRlcikKfQpkZW1vUmFjZSA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpe2QgPC0gZDN9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CgogICMgZ2V0IHJhY2UgcGVyIGNvbmRpdGlvbiBhbmQgb3ZlcmFsbAogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICByYWNlIDwtIGRhdGEuZnJhbWUoYWRkbWFyZ2lucyh3aXRoKGQsIHRhYmxlKGNvbmRpdGlvbiwgcmFjZV9jYXQpKSkpICU+JQogICAgICBmaWx0ZXIocmFjZV9jYXQgIT0gIlN1bSIpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKSB7CiAgICByYWNlIDwtIGRhdGEuZnJhbWUod2l0aChkLCB0YWJsZShyYWNlX2NhdCkpKSAlPiUKICAgICAgcmVuYW1lKG4gPSBGcmVxKSAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9ICJTdW0iKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChjb25kaXRpb24sIHJhY2VfY2F0LCBuKQogIH0KICAKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDMiKSkgewogICAgcmFjZSA8LSByYWNlICU+JQogICAgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3RvcihpZmVsc2UoY29uZGl0aW9uID09ICJTdW0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGwiLCBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImJlZXRsZSIsICJyb2JvdCIsICJhbGwiKSkpICU+JQogICAgYXJyYW5nZShjb25kaXRpb24sIHJhY2VfY2F0KSAlPiUKICAgIHNwcmVhZChyYWNlX2NhdCwgbikKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpIHsKICAgIHJhY2UgPC0gcmFjZSAlPiUKICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKGxldmVscyhkJGNvbmRpdGlvbiksICJhbGwiKSkpICU+JQogICAgYXJyYW5nZShjb25kaXRpb24sIHJhY2VfY2F0KSAlPiUKICAgIHNwcmVhZChyYWNlX2NhdCwgbikKICB9CiAgCiAgIyByZXR1cm4gZGF0YWZyYW1lIGZvciB1c2luZyBrYWJsZQogIHJldHVybihyYWNlKQp9CmRlbW9SZWxpZ2lvbiA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpe2QgPC0gZDN9CgogICMgZ2V0IHJlbGlnaW9uIHBlciBjb25kaXRpb24gYW5kIG92ZXJhbGwKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIikpIHsKICAgIHJlbGlnaW9uIDwtIGRhdGEuZnJhbWUoYWRkbWFyZ2lucyh3aXRoKGQsIHRhYmxlKGNvbmRpdGlvbiwgcmVsaWdpb25fY2F0KSkpKSAlPiUKICAgICAgZmlsdGVyKHJlbGlnaW9uX2NhdCAhPSAiU3VtIikgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpIHsKICAgIHJlbGlnaW9uIDwtIGRhdGEuZnJhbWUod2l0aChkLCB0YWJsZShyZWxpZ2lvbl9jYXQpKSkgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAiU3VtIikgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoY29uZGl0aW9uLCByZWxpZ2lvbl9jYXQsIG4pCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgMyIpKSB7CiAgICByZWxpZ2lvbiA8LSByZWxpZ2lvbiAlPiUKICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJiZWV0bGUiLCAicm9ib3QiLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCByZWxpZ2lvbl9jYXQpICU+JQogICAgc3ByZWFkKHJlbGlnaW9uX2NhdCwgbikKICB9CiAgCiAgIyByZXR1cm4gZGF0YWZyYW1lIGZvciB1c2luZyBrYWJsZQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXsKICAgIHN0b3AoIlJlbGlnaW9uIGluZm9ybWF0aW9uIG5vdCBhdmFpbGFibGUgZm9yIFN0dWR5IDQiKQogIH0gZWxzZSB7cmV0dXJuKHJlbGlnaW9uKX0KfQpkZW1vRWR1Y2F0aW9uIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KICAKICAjIGdldCBlZHVjYXRpb24gcGVyIGNvbmRpdGlvbiBhbmQgb3ZlcmFsbAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKSB7CiAgICBlZHVjYXRpb24gPC0gCiAgICAgIGRhdGEuZnJhbWUoYWRkbWFyZ2lucyh3aXRoKGQsIHRhYmxlKGNvbmRpdGlvbiwgZWR1Y2F0aW9uKSkpKSAlPiUKICAgICAgZmlsdGVyKGVkdWNhdGlvbiAhPSAiU3VtIikgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKGxldmVscyhkJGNvbmRpdGlvbiksICJhbGwiKSksCiAgICAgICAgICAgICBlZHVjYXRpb24gPSBmYWN0b3IoZWR1Y2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoMTo3LCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJzb21lX0hTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIU19kaXBsb21hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb21lX2NvbGxlZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzc29jaWF0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhY2hlbG9ycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29tZV9ncmFkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncmFkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmVmX25vIikpKSAlPiUKICAgICAgYXJyYW5nZShjb25kaXRpb24sIGVkdWNhdGlvbikgJT4lCiAgICAgIHNwcmVhZChlZHVjYXRpb24sIG4pCiAgfQogIAogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDMiKSl7CiAgICBzdG9wKCJFZHVjYXRpb24gaW5mb3JtYXRpb24gbm90IGF2YWlsYWJsZSBmb3IgU3R1ZGllcyAxLTMiKQogIH0gZWxzZSB7cmV0dXJuKGVkdWNhdGlvbil9Cn0KCiMgcGxvdHRpbmcgZnVuY3Rpb25zCm1ha2VGYWNldExhYnMgPC0gZnVuY3Rpb24oZGZfcGxvdHRpbmcpIHsKICBmYWNldF9sYWJlbHMgPC0gYXJyYXkoKQogIGRmX3Bsb3R0aW5nIDwtIGRmX3Bsb3R0aW5nICU+JSBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGNvbmRpdGlvbikpCiAgZm9yKGkgaW4gMTpsZW5ndGgobGV2ZWxzKGRmX3Bsb3R0aW5nJGNvbmRpdGlvbikpKSB7CiAgICBkZiA8LSBkZl9wbG90dGluZyAlPiUgZmlsdGVyKGNvbmRpdGlvbiA9PSBsZXZlbHMoZGZfcGxvdHRpbmckY29uZGl0aW9uKVtpXSkgJT4lCiAgICAgIHNlbGVjdChjb25kaXRpb24sIG4pICU+JSB1bmlxdWUoKQogICAgZmFjZXRfbGFiZWxzW2ldIDwtIHBhc3RlMChkZiRjb25kaXRpb24sICIgKG4gPSAiLCBkZiRuLCAiKSIpCiAgfQogIG5hbWVzKGZhY2V0X2xhYmVscykgPC0gbGV2ZWxzKGRmX3Bsb3R0aW5nJGNvbmRpdGlvbikKICByZXR1cm4oZmFjZXRfbGFiZWxzKQp9CmBgYAoKYGBge3IgbW9kZWxpbmcgZGVjaXNpb25zfQojIHJlbW92ZSBvdXRsaWVycz8KY2hvc2VuT3V0bGllckhhbmRsaW5nIDwtICJrZWVwIgojIGNob3Nlbk91dGxpZXJIYW5kbGluZyA8LSAicmVtb3ZlIgoKIyBleGNsdWRlIGFueSBjb25kaXRpb25zIGluIHN0dWR5IDQ/CmNob3NlbkV4Y2x1ZGUgPC0gIm5vbmUiCiMgY2hvc2VuRXhjbHVkZSA8LSBjKCJzdGFwbGVyIiwgImNhciIsICJjb21wdXRlciIpCgojIGV4Y2x1ZGUgYW55IGl0ZW1zPwpjaG9zZW5FeGNsdWRlSXRlbSA8LSAibm9uZSIKIyBjaG9zZW5FeGNsdWRlSXRlbSA8LSAiY29tcHV0YXRpb25zIgoKIyBOT1RFOiBhbHdheXMgY2hvb3NlIG1pbmltYWwgcmVzaWR1YWwgKGZtID0gIm1pbnJlcyIpIGluc3RlYWQgb2YgTUwgYmVjYXVzZSBvZiBub24tbm9ybWFsaXR5CgojIGZvciBFRkFzLCB3aGF0IGtpbmQgb2YgY29ycmVsYXRpb24/CmNob3NlbkNvclR5cGUgPC0gImNvciIgIyBwZWFyc29uIGNvcnJlbGF0aW9uCiMgY2hvc2VuQ29yVHlwZSA8LSAicG9seSIgIyBwb2x5Y2hvcmljIGNvcnJlbGF0aW9uCgojIGZvciBFRkFzLCB3aGF0IGtpbmQgb2Ygcm90YXRpb24/CmNob3NlblJvdFR5cGUgPC0gInZhcmltYXgiICMgdmFyaW1heCByb3RhdGlvbgojIGNob3NlblJvdFR5cGUgPC0gIm9ibGltaW4iICMgb2JsaW1pbiByb3RhdGlvbgojIGNob3NlblJvdFR5cGUgPC0gIm5vbmUiICMgbm8gcm90YXRpb24KCmRhdGEuZnJhbWUoImNvbmRpdGlvbnNFeGNsdWRlZCIgPSBjaG9zZW5FeGNsdWRlLAogICAgICAgICAgICJvdXRsaWVySGFuZGxpbmciID0gY2hvc2VuT3V0bGllckhhbmRsaW5nLAogICAgICAgICAgICJFRkFfY29ycmVsYXRpb24iID0gY2hvc2VuQ29yVHlwZSwKICAgICAgICAgICAiRUZBX3JvdGF0aW9uIiA9IGNob3NlblJvdFR5cGUpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMgRGF0YSBwcmVwYXJhdGlvbgoKYGBge3IgZGF0YSB1cGxvYWR9CiMgc3R1ZHkgMSAoMjAxNS0xMi0xNSwgMiBjb25kaXRpb25zLCBiZXR3ZWVuLXN1YmplY3RzKQpkX3Jhd19zdHVkeTEgPC0gcmVhZC5jc3YoImh0dHBzOi8vb3NmLmlvLzI5dm5nL2Rvd25sb2FkIikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDEiKQoKIyBzdHVkeSAyICgyMDE2LTAxLTEyLCAyIGNvbmRpdGlvbnMsIGJldHdlZW4tc3ViamVjdHMgLSBSRVBMSUNBVElPTikKZF9yYXdfc3R1ZHkyIDwtIHJlYWQuY3N2KCJodHRwczovL29zZi5pby9nNzZoai9kb3dubG9hZCIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAyIikKCiMgc3R1ZHkgMyAoMjAxNi0wMS0xMCwgMiBjb25kaXRpb25zLCB3aXRoaW4tc3ViamVjdHMpCmRfcmF3X3N0dWR5MyA8LSByZWFkLmNzdigiaHR0cHM6Ly9vc2YuaW8vZXB5a2YvZG93bmxvYWQiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMyIpCgojIHN0dWR5IDQgKDIwMTYtMDEtMTQsIDIxIGNvbmRpdGlvbnMsIGJldHdlZW4tc3ViamVjdHMpCmRfcmF3X3N0dWR5NCA8LSByZWFkLmNzdigiaHR0cHM6Ly9vc2YuaW8va2R6Z2UvZG93bmxvYWQiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgNCIpCmBgYAoKYGBge3IgZGF0YSBjbGVhbnVwfQojIGNsZWFuIHVwIGRhdGFzZXRzCmQxIDwtIGNsZWFudXAoInN0dWR5IDEiKQpkMiA8LSBjbGVhbnVwKCJzdHVkeSAyIikKZDMgPC0gY2xlYW51cCgic3R1ZHkgMyIpCmQ0IDwtIGNsZWFudXAoInN0dWR5IDQiKQpgYGAKCmBgYHtyIGRhdGFmcmFtZXMgZm9yIGRpbWVuc2lvbiByZWR1Y2F0aW9ufQojIG1ha2UgZGF0YWZyYW1lcyBmb3IgczEKIyBkMV9iZWV0bGUgPC0gbWFrZURSREYoInN0dWR5IDEiLCAiYmVldGxlIikKIyBkMV9yb2JvdCA8LSBtYWtlRFJERigic3R1ZHkgMSIsICJyb2JvdCIpCmQxX2FsbCA8LSBtYWtlRFJERigic3R1ZHkgMSIsICJhbGwiKQoKIyBtYWtlIGRhdGFmcmFtZXMgZm9yIHN0dWR5IDIKIyBkMl9iZWV0bGUgPC0gbWFrZURSREYoInN0dWR5IDIiLCAiYmVldGxlIikKIyBkMl9yb2JvdCA8LSBtYWtlRFJERigic3R1ZHkgMiIsICJyb2JvdCIpCmQyX2FsbCA8LSBtYWtlRFJERigic3R1ZHkgMiIsICJhbGwiKQoKIyBtYWtlIGRhdGFmcmFtZXMgZm9yIHN0dWR5IDMKIyBkM19iZWV0bGUgPC0gbWFrZURSREYoInN0dWR5IDMiLCAiYmVldGxlIikKIyBkM19yb2JvdCA8LSBtYWtlRFJERigic3R1ZHkgMyIsICJyb2JvdCIpCmQzX2FsbCA8LSBtYWtlRFJERigic3R1ZHkgMyIsICJhbGwiKQoKIyBtYWtlIGRhdGFmcmFtZXMgZm9yIHN0dWR5IDQKZDRfYWxsIDwtIG1ha2VEUkRGKCJzdHVkeSA0IiwgImFsbCIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMgQW5hbHlzaXMgcGxhbgoKRm9yIGFsbCBzdHVkaWVzIHdlIGNvbmR1Y3QgZXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2VzIHVzaW5nIFBlYXJzb24gY29ycmVsYXRpb25zIHRvIGZpbmQgbWluaW11bSByZXNpZHVhbCBzb2x1dGlvbnMuIAoKRm9yIGVhY2ggc3R1ZHksIHdlIGZpcnN0IGV4YW1pbmUgbWF4aW1hbCB1bnJvdGF0ZWQgYW5kIHJvdGF0ZWQgc29sdXRpb25zLiBUbyBkZXRlcm1pbmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZhY3RvcnMgdG8gZXh0cmFjdCwgd2UgdXNlIHRoZSBmb2xsb3dpbmcgcnVsZSBvZiB0aHVtYjogV2l0aCAkcCQgb2JzZXJ2YXRpb25zIHBlciBwYXJ0aWNpcGFudCwgd2UgY2FuIGV4dHJhY3QgYSBtYXhpbXVtIG9mICRrJCBmYWN0b3JzLCB3aGVyZSAkKHAtaykqMiA+IHArayQsIGkuZS4sICRrIDwgcC8zJC4gVGh1cywgd2l0aCA0MCBtZW50YWwgY2FwYWNpdHkgaXRlbXMsIHdlIGNhbiBleHRyYWN0IGEgbWF4aW11bSBvZiAxMyBmYWN0b3JzLgoKVG8gZGV0ZXJtaW5lIGhvdyBtYW55IGZhY3RvcnMgdG8gcmV0YWluLCB3ZSB1c2UgdGhlIGZvbGxvd2luZyBwcmVzZXQgcmV0ZW50aW9uIGNyaXRlcmlhLCBjb25zaWRlcmluZyB0aGUgdW5yb3RhdGVkIG1heGltYWwgc29sdXRpb24gKHVubGVzcyBvdGhlcndpc2Ugbm90ZWQpOgoKICAtIEVhY2ggZmFjdG9yIG11c3QgaGF2ZSBhbiBlaWdlbnZhbHVlID4xLjAuCiAgLSBFYWNoIGZhY3RvciBtdXN0IGluZGl2aWR1YWxseSBhY2NvdW50IGZvciA+NSUgb2YgdGhlIHRvdGFsIHZhcmlhbmNlIGluIHRoZSBtYXhpbWFsIG1vZGVsLgogIC0gQWZ0ZXIgcm90YXRpb24sIGVhY2ggZmFjdG9yIG11c3QgYmUgdGhlIGRvbWluYW50IGZhY3RvciAoaS5lLiwgdGhlIGZhY3RvciB3aXRoIHRoZSBoaWdoZXN0IGZhY3RvciBsb2FkaW5nKSBmb3Ig4omlMSBtZW50YWwgY2FwYWNpdHkgaXRlbS4KCldlIHRoZW4gZXhhbWluZSBhbmQgaW50ZXJwcmV0IHZhcmltYXgtcm90YXRlZCBzb2x1dGlvbnMsIGV4dHJhY3Rpbmcgb25seSB0aGUgbnVtYmVyIG9mIGZhY3RvcnMgdGhhdCBtZWV0IHRoZXNlIGNyaXRlcmlhLgoKKk5vdGUqOiBGb3IgU3R1ZGllcyAxLTIsIHdlIGluaXRpYWxseSBwbGFubmVkIHRvIGNvbmR1Y3QgZGltZW5zaW9uIHJlZHVjdGlvbiBhbmFseXNlcyBmb3IgZWFjaCBjb25kaXRpb24gKGJlZXRsZSB2cy4gcm9ib3QpIHNlcGFyYXRlbHkuIEhvd2V2ZXIsIHdlIG5vdyBjb25zaWRlciB0aGlzIGFuYWx5c2lzIHBsYW4gdG8gaGF2ZSBiZWVuIGZ1bmRhbWVudGFsbHkgZmxhd2VkOiBFYWNoIG9mIHRoZXNlIHNlcGFyYXRlIGFuYWx5c2VzIGlzIG9ubHkgY2FwYWJsZSBvZiBzdXJmYWNpbmcgZmFjdG9ycyB0aGF0IGhpZ2hsaWdodCBzdWJzdGFudGlhbCBkaXNhZ3JlZW1lbnQgYW1vbmcgcGFydGljaXBhbnRzIHdpdGhpbiB0aGF0IGNvbmRpdGlvbiB0aHVzIGZhaWxpbmcgdG8gY2FwdHVyZSBrZXkgZGlmZmVyZW5jZXMgaW4gYXR0cmlidXRpb25zIG9mIG1lbnRhbCBjYXBhY2l0aWVzIHRvIGJlZXRsZXMgdnMuIHJvYm90cywgd2l0aCBubyBmb3JtYWwgbWVhbnMgb2Ygc3ludGhlc2l6aW5nIHJlc3VsdHMgYWNyb3NzIGNvbmRpdGlvbnMuIE5vbmV0aGVsZXNzLCB0aGUgcmVzdWx0cyBvZiB0aGVzZSBhbmFseXNlcyBhcmUgZ2VuZXJhbGx5IGNvbnNpc3RlbnQgd2l0aCB0aGUgZmluZGluZ3MgcmVwb3J0ZWQgaGVyZTogVGhlIG1vc3QgcHJvbWluZW50IGFuZCByZWxpYWJsZSBmaW5kaW5nIHdpdGhpbiBlYWNoIGNvbmRpdGlvbiBpcyB0aGF0IHBhcnRpY2lwYW50cyBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVtb3Rpb25hbCBhbmQgcGVyY2VwdHVhbCB2YXJpZXRpZXMgb2YgZXhwZXJpZW5jZS4gU2VlIDxhIGhyZWY9Imh0dHBzOi8vb3NmLmlvL3pkM211IiwgdGFyZ2V0PSJibGFuayI+aHR0cHM6Ly9vc2YuaW8vemQzbXU8L2E+IGZvciB0aGUgcHJlcmVnaXN0ZXJlZCBhbmFseXNlcywgaW5jbHVkaW5nIGFuYWx5c2lzIHNjcmlwdHMuCgojIFN0dWR5IDEKCkRlc2lnbjogMiBjb25kaXRpb25zIChiZWV0bGUsIHJvYm90KSwgYmV0d2Vlbi1zdWJqZWN0cwpEYXRlIGNvbmR1Y3RlZDogMjAxNS0xMi0xNQoKIyMgRGVtb2dyYXBoaWNzCgpgYGB7ciBzMSBkZW1vZ3JhcGhpY3N9CiMgZXhhbWluZSBleGNsdXNpb24KZXhjbHVkZWRDb3VudHMoInN0dWR5IDEiKQoKIyBtYWtlIGRlbW9ncmFwaGljcyB0YWJsZXMKZGVtb1NhbXBsZVNpemUoInN0dWR5IDEiKQpkZW1vRHVyYXRpb24oInN0dWR5IDEiKQpkZW1vQWdlKCJzdHVkeSAxIikKZGVtb0dlbmRlcigic3R1ZHkgMSIpCmRlbW9SYWNlKCJzdHVkeSAxIikKZGVtb1JlbGlnaW9uKCJzdHVkeSAxIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgojIyMgU3RlcCAxOiBSdW4gbWF4aW1hbCBFRkEgKHdpdGhvdXQgYW5kIHdpdGggcm90YXRpb24pCgpgYGB7ciBzMSBhbGwgbm8gcm90YXRpb259CiMgZXhhbWluZSBzY3JlZSBwbG90CiMgZmEucGFyYWxsZWwoZDFfYWxsKQoKIyBydW4gRUZBIHdpdGhvdXQgcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2QxX2FsbF91bnJvdGF0ZWQgPC0gZmEoZDFfYWxsLCAxMywgcm90YXRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQpwcmludChlZmFfZDFfYWxsX3Vucm90YXRlZCkKYGBgCgpgYGB7ciBzMSBob3cgbWFueSBmYWN0b3JzLCBpbmNsdWRlID0gRn0KIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2QxX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2QxX2FsbF91bnJvdGF0ZWQpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQoKIyBjb3VudCBmYWN0b3JzIHdpdGggZWlnZW52YWx1ZXMgPiAxIGFuZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JQplZmFfZDFfYWxsX3Vucm90YXRlZF9uZmFjdG9ycyA8LSBlZmFfZDFfYWxsX3Vucm90YXRlZF9laWdlbnZhbHVlcyAlPiUKICBmaWx0ZXIoU1MubG9hZGluZ3MgPiAxLCBQcm9wb3J0aW9uLkV4cGxhaW5lZCA+IDAuMDUpICU+JQogIGNvdW50KCkgJT4lCiAgYXMubnVtZXJpYygpCmVmYV9kMV9hbGxfdW5yb3RhdGVkX25mYWN0b3JzCmBgYAoKYGBge3IgczEgYWxsIHJvdGF0aW9ufQplZmFfZDFfYWxsX3JvdGF0ZWRfbWF4IDwtIGZhKGQxX2FsbCwgMTMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgplZmFfZDFfYWxsX3JvdGF0ZWQgPC0gZmEoZDFfYWxsLCBlZmFfZDFfYWxsX3Vucm90YXRlZF9uZmFjdG9ycywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCiMgY2hlY2sgdGhhdCBlYWNoIG9mIHRoZXNlIGZhY3RvcnMgaXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYXQgbGVhc3Qgb25lIG1lbnRhbCBjYXBhY2l0eSBpdGVtCmVmYV9kMV9hbGxfcm90YXRlZF9sb2FkaW5ncyA8LSBmYS5zb3J0KGxvYWRpbmdzKGVmYV9kMV9hbGxfcm90YXRlZClbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogIG11dGF0ZShsb2FkaW5nX2FicyA9IGFicyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGxvYWRpbmdfYWJzKSAlPiUKICB1bmdyb3VwKCkKZWZhX2QxX2FsbF9yb3RhdGVkX2xvYWRpbmdzCgojIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKZWZhX2QxX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApCgojIHNldCBudW1iZXIgb2YgZmFjdG9ycyB0byBleHRyYWN0Cm5mYWN0b3JzX2QxX2FsbCA8LSBlZmFfZDFfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgJT4lIAogIGNvdW50KGZhY3RvcikgJT4lIAogIGZpbHRlcihuID4gMCkgJT4lCiAgbnJvdygpCm5mYWN0b3JzX2QxX2FsbApgYGAKCiMjIyBTdGVwIDI6IFJ1biBFRkEgd2l0aCB2YXJpbWF4IHJvdGF0aW9uCgpgYGB7ciBzMSBhbGwgdmFyaW1heCByb3RhdGlvbn0KIyBydW4gRUZBIHdpdGggcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2QxX2FsbF9yb3RhdGVkTiA8LSBmYShkMV9hbGwsIG5mYWN0b3JzX2QxX2FsbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlID0gY2hvc2VuUm90VHlwZSwgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QxX2FsbF9yb3RhdGVkTikKCiMgZ2V0IGxvYWRpbmdzIGZvciBlYWNoIGZhY3RvcgplZmFfZDFfYWxsX3JvdGF0ZWROX2xvYWRpbmdzIDwtIGxvYWRpbmdzKGVmYV9kMV9hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JSAKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm1jIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMjIyBGYWN0b3IgbG9hZGluZ3MgdGFibGUKCmBgYHtyIHMxIGxvYWRpbmdzIHRhYmxlfQpkYXRhLmZyYW1lKGxvYWRpbmdzKGZhLnNvcnQoZWZhX2QxX2FsbF9yb3RhdGVkTikpW10pICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiTSIpKSwgZnVucyhyb3VuZDIpKQpgYGAKCiMgU3R1ZHkgMgoKRGVzaWduOiAyIGNvbmRpdGlvbnMgKGJlZXRsZSwgcm9ib3QpLCBiZXR3ZWVuLXN1YmplY3RzIChyZXBsaWNhdGlvbiBvZiBTdHVkeSAxKQpEYXRlIGNvbmR1Y3RlZDogMjAxNi0wMS0xMgoKIyMgRGVtb2dyYXBoaWNzCgpgYGB7ciBzMiBkZW1vZ3JhcGhpY3N9CiMgZXhhbWluZSBleGNsdXNpb24KZXhjbHVkZWRDb3VudHMoInN0dWR5IDIiKQoKIyBtYWtlIGRlbW9ncmFwaGljcyB0YWJsZXMKZGVtb1NhbXBsZVNpemUoInN0dWR5IDIiKQpkZW1vRHVyYXRpb24oInN0dWR5IDIiKQpkZW1vQWdlKCJzdHVkeSAyIikKZGVtb0dlbmRlcigic3R1ZHkgMiIpCmRlbW9SYWNlKCJzdHVkeSAyIikKZGVtb1JlbGlnaW9uKCJzdHVkeSAyIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgojIyMgU3RlcCAxOiBSdW4gbWF4aW1hbCBFRkEgKHdpdGhvdXQgYW5kIHdpdGggcm90YXRpb24pCgpgYGB7ciBzMiBhbGwgbm8gcm90YXRpb259CiMgZXhhbWluZSBzY3JlZSBwbG90CiMgZmEucGFyYWxsZWwoZDJfYWxsKQoKIyBydW4gRUZBIHdpdGhvdXQgcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2QyX2FsbF91bnJvdGF0ZWQgPC0gZmEoZDJfYWxsLCAxMywgcm90YXRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQpwcmludChlZmFfZDJfYWxsX3Vucm90YXRlZCkKYGBgCgpgYGB7ciBzMiBob3cgbWFueSBmYWN0b3JzLCBpbmNsdWRlID0gRn0KIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2QyX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2QyX2FsbF91bnJvdGF0ZWQpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQoKIyBjb3VudCBmYWN0b3JzIHdpdGggZWlnZW52YWx1ZXMgPiAxIGFuZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JQplZmFfZDJfYWxsX3Vucm90YXRlZF9uZmFjdG9ycyA8LSBlZmFfZDJfYWxsX3Vucm90YXRlZF9laWdlbnZhbHVlcyAlPiUKICBmaWx0ZXIoU1MubG9hZGluZ3MgPiAxLCBQcm9wb3J0aW9uLkV4cGxhaW5lZCA+IDAuMDUpICU+JQogIGNvdW50KCkgJT4lCiAgYXMubnVtZXJpYygpCmVmYV9kMl9hbGxfdW5yb3RhdGVkX25mYWN0b3JzCmBgYAoKYGBge3IgczIgYWxsIHJvdGF0aW9ufQplZmFfZDJfYWxsX3JvdGF0ZWRfbWF4IDwtIGZhKGQyX2FsbCwgMTMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgplZmFfZDJfYWxsX3JvdGF0ZWQgPC0gZmEoZDJfYWxsLCBlZmFfZDJfYWxsX3Vucm90YXRlZF9uZmFjdG9ycywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCiMgY2hlY2sgdGhhdCBlYWNoIG9mIHRoZXNlIGZhY3RvcnMgaXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYXQgbGVhc3Qgb25lIG1lbnRhbCBjYXBhY2l0eSBpdGVtCmVmYV9kMl9hbGxfcm90YXRlZF9sb2FkaW5ncyA8LSBmYS5zb3J0KGxvYWRpbmdzKGVmYV9kMl9hbGxfcm90YXRlZClbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogIG11dGF0ZShsb2FkaW5nX2FicyA9IGFicyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGxvYWRpbmdfYWJzKSAlPiUKICB1bmdyb3VwKCkKZWZhX2QyX2FsbF9yb3RhdGVkX2xvYWRpbmdzCgojIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKZWZhX2QyX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApCgojIHNldCBudW1iZXIgb2YgZmFjdG9ycyB0byBleHRyYWN0Cm5mYWN0b3JzX2QyX2FsbCA8LSBlZmFfZDJfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgJT4lIAogIGNvdW50KGZhY3RvcikgJT4lIAogIGZpbHRlcihuID4gMCkgJT4lCiAgbnJvdygpCm5mYWN0b3JzX2QyX2FsbApgYGAKCiMjIyBTdGVwIDI6IFJ1biBFRkEgd2l0aCB2YXJpbWF4IHJvdGF0aW9uCgpgYGB7ciBzMiBhbGwgdmFyaW1heCByb3RhdGlvbn0KIyBydW4gRUZBIHdpdGggcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2QyX2FsbF9yb3RhdGVkTiA8LSBmYShkMl9hbGwsIG5mYWN0b3JzX2QyX2FsbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlID0gY2hvc2VuUm90VHlwZSwgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QyX2FsbF9yb3RhdGVkTikKCiMgZ2V0IGxvYWRpbmdzIGZvciBlYWNoIGZhY3RvcgplZmFfZDJfYWxsX3JvdGF0ZWROX2xvYWRpbmdzIDwtIGxvYWRpbmdzKGVmYV9kMl9hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JSAKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm1jIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMjIyBGYWN0b3IgbG9hZGluZ3MgdGFibGUKCmBgYHtyIHMyIGxvYWRpbmdzIHRhYmxlfQpkYXRhLmZyYW1lKGxvYWRpbmdzKGZhLnNvcnQoZWZhX2QyX2FsbF9yb3RhdGVkTikpW10pICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiTSIpKSwgZnVucyhyb3VuZDIpKQpgYGAKCiMgU3R1ZHkgMyAKCkRlc2lnbjogMiBjb25kaXRpb25zIChiZWV0bGUsIHJvYm90KSwgd2l0aGluLXN1YmplY3RzCkRhdGUgY29uZHVjdGVkOiAyMDE2LTAxLTEwCgojIyBEZW1vZ3JhcGhpY3MKCmBgYHtyIHMzIGRlbW9ncmFwaGljc30KIyBleGFtaW5lIGV4Y2x1c2lvbgpleGNsdWRlZENvdW50cygic3R1ZHkgMyIpCgojIG1ha2UgZGVtb2dyYXBoaWNzIHRhYmxlcwpkZW1vU2FtcGxlU2l6ZSgic3R1ZHkgMyIpCmRlbW9EdXJhdGlvbigic3R1ZHkgMyIpCmRlbW9BZ2UoInN0dWR5IDMiKQpkZW1vR2VuZGVyKCJzdHVkeSAzIikKZGVtb1JhY2UoInN0dWR5IDMiKQpkZW1vUmVsaWdpb24oInN0dWR5IDMiKQpgYGAKCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48YSBocmVmPSIjaGVhZGVyIj5iYWNrIHRvIFRPQzwvYT48L3A+CgojIyBFeHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMKCiMjIyBTdGVwIDE6IFJ1biBtYXhpbWFsIEVGQSAod2l0aG91dCBhbmQgd2l0aCByb3RhdGlvbikKCmBgYHtyIHMzIGFsbCBubyByb3RhdGlvbn0KIyBleGFtaW5lIHNjcmVlIHBsb3QKIyBmYS5wYXJhbGxlbChkM19hbGwpCgojIHJ1biBFRkEgd2l0aG91dCByb3RhdGlvbiB3aXRoIE4gZmFjdG9ycwplZmFfZDNfYWxsX3Vucm90YXRlZCA8LSBmYShkM19hbGwsIDEzLCByb3RhdGUgPSAibm9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCnByaW50KGVmYV9kM19hbGxfdW5yb3RhdGVkKQpgYGAKCmBgYHtyIHMzIGhvdyBtYW55IGZhY3RvcnMsIGluY2x1ZGUgPSBGfQojIGV4YW1pbmUgZWlnZW52YWx1ZXMgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZAplZmFfZDNfYWxsX3Vucm90YXRlZF9laWdlbnZhbHVlcyA8LSBwcmludChlZmFfZDNfYWxsX3Vucm90YXRlZCkkVmFjY291bnRlZCAlPiUKICB0KCkgJT4lCiAgZGF0YS5mcmFtZSgpCgojIGNvdW50IGZhY3RvcnMgd2l0aCBlaWdlbnZhbHVlcyA+IDEgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlCmVmYV9kM19hbGxfdW5yb3RhdGVkX25mYWN0b3JzIDwtIGVmYV9kM19hbGxfdW5yb3RhdGVkX2VpZ2VudmFsdWVzICU+JQogIGZpbHRlcihTUy5sb2FkaW5ncyA+IDEsIFByb3BvcnRpb24uRXhwbGFpbmVkID4gMC4wNSkgJT4lCiAgY291bnQoKSAlPiUKICBhcy5udW1lcmljKCkKZWZhX2QzX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMKYGBgCgpgYGB7ciBzMyBhbGwgcm90YXRpb259CmVmYV9kM19hbGxfcm90YXRlZF9tYXggPC0gZmEoZDNfYWxsLCAxMywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCmVmYV9kM19hbGxfcm90YXRlZCA8LSBmYShkM19hbGwsIGVmYV9kM19hbGxfdW5yb3RhdGVkX25mYWN0b3JzLCByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQoKIyBjaGVjayB0aGF0IGVhY2ggb2YgdGhlc2UgZmFjdG9ycyBpcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBhdCBsZWFzdCBvbmUgbWVudGFsIGNhcGFjaXR5IGl0ZW0KZWZhX2QzX2FsbF9yb3RhdGVkX2xvYWRpbmdzIDwtIGZhLnNvcnQobG9hZGluZ3MoZWZhX2QzX2FsbF9yb3RhdGVkKVtdKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSkgJT4lCiAgbXV0YXRlKGxvYWRpbmdfYWJzID0gYWJzKGxvYWRpbmcpKSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgdG9wX24oMSwgbG9hZGluZ19hYnMpICU+JQogIHVuZ3JvdXAoKQplZmFfZDNfYWxsX3JvdGF0ZWRfbG9hZGluZ3MKCiMgZHJvcCBhbnkgZmFjdG9ycyB3aGVyZSBuIDwgMQplZmFfZDNfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgJT4lIAogIGNvdW50KGZhY3RvcikgJT4lIAogIGZpbHRlcihuID4gMCkKCiMgc2V0IG51bWJlciBvZiBmYWN0b3JzIHRvIGV4dHJhY3QKbmZhY3RvcnNfZDNfYWxsIDwtIGVmYV9kM19hbGxfcm90YXRlZF9sb2FkaW5ncyAlPiUgCiAgY291bnQoZmFjdG9yKSAlPiUgCiAgZmlsdGVyKG4gPiAwKSAlPiUKICBucm93KCkKbmZhY3RvcnNfZDNfYWxsCmBgYAoKIyMjIFN0ZXAgMjogUnVuIEVGQSB3aXRoIHZhcmltYXggcm90YXRpb24KCmBgYHtyIHMzIGFsbCB2YXJpbWF4IHJvdGF0aW9ufQojIHJ1biBFRkEgd2l0aCByb3RhdGlvbiB3aXRoIE4gZmFjdG9ycwplZmFfZDNfYWxsX3JvdGF0ZWROIDwtIGZhKGQzX2FsbCwgbmZhY3RvcnNfZDNfYWxsLCAKICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLCBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQpwcmludChlZmFfZDNfYWxsX3JvdGF0ZWROKQoKIyBnZXQgbG9hZGluZ3MgZm9yIGVhY2ggZmFjdG9yCmVmYV9kM19hbGxfcm90YXRlZE5fbG9hZGluZ3MgPC0gbG9hZGluZ3MoZWZhX2QzX2FsbF9yb3RhdGVkTilbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lIAogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAibWMiKQpgYGAKCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48YSBocmVmPSIjaGVhZGVyIj5iYWNrIHRvIFRPQzwvYT48L3A+CgojIyMjIEZhY3RvciBsb2FkaW5ncyB0YWJsZQoKYGBge3IgczMgbG9hZGluZ3MgdGFibGV9CmRhdGEuZnJhbWUobG9hZGluZ3MoZmEuc29ydChlZmFfZDNfYWxsX3JvdGF0ZWROKSlbXSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJNIikpLCBmdW5zKHJvdW5kMikpCmBgYAoKIyBTdHVkeSA0CgpEZXNpZ246IDIxIGNvbmRpdGlvbnMsIGJldHdlZW4tc3ViamVjdHMKRGF0ZSBjb25kdWN0ZWQ6IDIwMTYtMDEtMTQKCiMjIERlbW9ncmFwaGljcwoKYGBge3IgczQgZGVtb2dyYXBoaWNzfQojIGV4YW1pbmUgZXhjbHVzaW9uCmV4Y2x1ZGVkQ291bnRzKCJzdHVkeSA0IikKCiMgbWFrZSBkZW1vZ3JhcGhpY3MgdGFibGVzCmRlbW9TYW1wbGVTaXplKCJzdHVkeSA0IikKZGVtb0R1cmF0aW9uKCJzdHVkeSA0IikKZGVtb0FnZSgic3R1ZHkgNCIpCmRlbW9HZW5kZXIoInN0dWR5IDQiKQpkZW1vUmFjZSgic3R1ZHkgNCIpCmRlbW9FZHVjYXRpb24oInN0dWR5IDQiKQpgYGAKCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48YSBocmVmPSIjaGVhZGVyIj5iYWNrIHRvIFRPQzwvYT48L3A+CgojIyBFeHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMKCiMjIyBTdGVwIDE6IFJ1biBtYXhpbWFsIEVGQSAod2l0aG91dCBhbmQgd2l0aCByb3RhdGlvbikKCmBgYHtyIHM0IGFsbCBubyByb3RhdGlvbn0KIyBleGFtaW5lIHNjcmVlIHBsb3QKIyBmYS5wYXJhbGxlbChkNF9hbGwpCgojIHJ1biBFRkEgd2l0aG91dCByb3RhdGlvbiB3aXRoIE4gZmFjdG9ycwplZmFfZDRfYWxsX3Vucm90YXRlZCA8LSBmYShkNF9hbGwsIDEzLCByb3RhdGUgPSAibm9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCnByaW50KGVmYV9kNF9hbGxfdW5yb3RhdGVkKQpgYGAKCmBgYHtyIHM0IGhvdyBtYW55IGZhY3RvcnMsIGluY2x1ZGUgPSBGfQojIGV4YW1pbmUgZWlnZW52YWx1ZXMgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZAplZmFfZDRfYWxsX3Vucm90YXRlZF9laWdlbnZhbHVlcyA8LSBwcmludChlZmFfZDRfYWxsX3Vucm90YXRlZCkkVmFjY291bnRlZCAlPiUKICB0KCkgJT4lCiAgZGF0YS5mcmFtZSgpCgojIGNvdW50IGZhY3RvcnMgd2l0aCBlaWdlbnZhbHVlcyA+IDEgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlCmVmYV9kNF9hbGxfdW5yb3RhdGVkX25mYWN0b3JzIDwtIGVmYV9kNF9hbGxfdW5yb3RhdGVkX2VpZ2VudmFsdWVzICU+JQogIGZpbHRlcihTUy5sb2FkaW5ncyA+IDEsIFByb3BvcnRpb24uRXhwbGFpbmVkID4gMC4wNSkgJT4lCiAgY291bnQoKSAlPiUKICBhcy5udW1lcmljKCkKZWZhX2Q0X2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMKYGBgCgpgYGB7ciBzNCBhbGwgcm90YXRpb259CmVmYV9kNF9hbGxfcm90YXRlZF9tYXggPC0gZmEoZDRfYWxsLCAxMywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCmVmYV9kNF9hbGxfcm90YXRlZCA8LSBmYShkNF9hbGwsIGVmYV9kNF9hbGxfdW5yb3RhdGVkX25mYWN0b3JzLCByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQoKIyBjaGVjayB0aGF0IGVhY2ggb2YgdGhlc2UgZmFjdG9ycyBpcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBhdCBsZWFzdCBvbmUgbWVudGFsIGNhcGFjaXR5IGl0ZW0KZWZhX2Q0X2FsbF9yb3RhdGVkX2xvYWRpbmdzIDwtIGZhLnNvcnQobG9hZGluZ3MoZWZhX2Q0X2FsbF9yb3RhdGVkKVtdKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSkgJT4lCiAgbXV0YXRlKGxvYWRpbmdfYWJzID0gYWJzKGxvYWRpbmcpKSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgdG9wX24oMSwgbG9hZGluZ19hYnMpICU+JQogIHVuZ3JvdXAoKQplZmFfZDRfYWxsX3JvdGF0ZWRfbG9hZGluZ3MKCiMgZHJvcCBhbnkgZmFjdG9ycyB3aGVyZSBuIDwgMQplZmFfZDRfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgJT4lIAogIGNvdW50KGZhY3RvcikgJT4lIAogIGZpbHRlcihuID4gMCkKCiMgc2V0IG51bWJlciBvZiBmYWN0b3JzIHRvIGV4dHJhY3QKbmZhY3RvcnNfZDRfYWxsIDwtIGVmYV9kNF9hbGxfcm90YXRlZF9sb2FkaW5ncyAlPiUgCiAgY291bnQoZmFjdG9yKSAlPiUgCiAgZmlsdGVyKG4gPiAwKSAlPiUKICBucm93KCkKbmZhY3RvcnNfZDRfYWxsCmBgYAoKIyMjIFN0ZXAgMjogUnVuIEVGQSB3aXRoIHZhcmltYXggcm90YXRpb24KCmBgYHtyIHM0IGFsbCB2YXJpbWF4IHJvdGF0aW9ufQojIHJ1biBFRkEgd2l0aCByb3RhdGlvbiB3aXRoIE4gZmFjdG9ycwplZmFfZDRfYWxsX3JvdGF0ZWROIDwtIGZhKGQ0X2FsbCwgbmZhY3RvcnNfZDRfYWxsLCAKICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLCBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQpwcmludChlZmFfZDRfYWxsX3JvdGF0ZWROKQoKIyBnZXQgbG9hZGluZ3MgZm9yIGVhY2ggZmFjdG9yCmVmYV9kNF9hbGxfcm90YXRlZE5fbG9hZGluZ3MgPC0gbG9hZGluZ3MoZWZhX2Q0X2FsbF9yb3RhdGVkTilbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lIAogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAibWMiKQpgYGAKCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48YSBocmVmPSIjaGVhZGVyIj5iYWNrIHRvIFRPQzwvYT48L3A+CgojIyMjIEZhY3RvciBsb2FkaW5ncyB0YWJsZQoKYGBge3IgczQgbG9hZGluZ3MgdGFibGV9CmRhdGEuZnJhbWUobG9hZGluZ3MoZmEuc29ydChlZmFfZDRfYWxsX3JvdGF0ZWROKSlbXSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJNIikpLCBmdW5zKHJvdW5kMikpCmBgYAoKIyBCaWcgZmFjdG9yIGxvYWRpbmdzIHRhYmxlIGZvciBhbGwgc3R1ZGllcyAoU3R1ZGllcyAxLTQpCgpgYGB7ciBhbGwgc3R1ZGllcyBsb2FkaW5ncyB0YWJsZX0Kb3JkZXJfczEgPC0gbG9hZGluZ3MoZmEuc29ydChlZmFfZDFfYWxsX3JvdGF0ZWROKSlbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAib3JkZXIxIikgJT4lCiAgcmVuYW1lKHMxX01SMiA9IE1SMiwgczFfTVIxID0gTVIxLCBzMV9NUjMgPSBNUjMpCgpvcmRlcl9zMiA8LSBsb2FkaW5ncyhmYS5zb3J0KGVmYV9kMl9hbGxfcm90YXRlZE4pKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm1jIikgJT4lCiAgcmVuYW1lKHMyX01SMiA9IE1SMiwgczJfTVIxID0gTVIxLCBzMl9NUjMgPSBNUjMpCgpvcmRlcl9zMyA8LSBsb2FkaW5ncyhmYS5zb3J0KGVmYV9kM19hbGxfcm90YXRlZE4pKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm1jIikgJT4lCiAgcmVuYW1lKHMzX01SMiA9IE1SMiwgczNfTVIxID0gTVIxLCBzM19NUjMgPSBNUjMpCgpvcmRlcl9zNCA8LSBsb2FkaW5ncyhmYS5zb3J0KGVmYV9kNF9hbGxfcm90YXRlZE4pKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm1jIikgJT4lCiAgcmVuYW1lKHM0X01SMiA9IE1SMiwgczRfTVIxID0gTVIxLCBzNF9NUjMgPSBNUjMpCgpiaWdUYWJsZSA8LSBvcmRlcl9zMSAlPiUKICBmdWxsX2pvaW4ob3JkZXJfczIpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zMykgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3M0KSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgicyIpKSwgZnVucyhyb3VuZDIpKSAlPiUKICBzZWxlY3Qob3JkZXIxLCBtYywgZW5kc193aXRoKCJNUjEiKSwgZW5kc193aXRoKCJNUjIiKSwgZW5kc193aXRoKCJNUjMiKSkKCmJpZ1RhYmxlCmBgYAoKIyBGaWd1cmVzCgpgYGB7ciBwbG90dGluZyBzZXR1cCBjaGFyYWN0ZXIgbWVhbnMsIGluY2x1ZGUgPSBGfQojIGJvb3RzdHJhcCA5NSUgQ0lzIGZvciByYXRpbmdzIGJ5IGNoYXJhY3RlciAobm9ucGFyYW1ldHJpYykKIyBzdHVkeSAxCmNoYXJfcGxvdHRpbmdfcmF0aW5nc19zMSA8LSBkMSAlPiUgCiAgc2VsZWN0KGNvbmRpdGlvbiwgc3ViaWQsIGhhcHB5OnByaWRlKSAlPiUKICBnYXRoZXIobWMsIHJlc3BvbnNlLCAtc3ViaWQsIC1jb25kaXRpb24pICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGFzLm51bWVyaWMocmVzcG9uc2UpKSAlPiUKICBncm91cF9ieShjb25kaXRpb24sIG1jKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRyZXNwb25zZSkpKSkgJT4lCiAgZnVsbF9qb2luKGRlbW9TYW1wbGVTaXplKCJzdHVkeSAxIikgJT4lIGZpbHRlcihjb25kaXRpb24gIT0gImFsbCIpKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMSIpCgojIHN0dWR5IDIKY2hhcl9wbG90dGluZ19yYXRpbmdzX3MyIDwtIGQyICU+JSAKICBzZWxlY3QoY29uZGl0aW9uLCBzdWJpZCwgaGFwcHk6cHJpZGUpICU+JQogIGdhdGhlcihtYywgcmVzcG9uc2UsIC1zdWJpZCwgLWNvbmRpdGlvbikgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gYXMubnVtZXJpYyhyZXNwb25zZSkpICU+JQogIGdyb3VwX2J5KGNvbmRpdGlvbiwgbWMpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHJlc3BvbnNlKSkpKSAlPiUKICBmdWxsX2pvaW4oZGVtb1NhbXBsZVNpemUoInN0dWR5IDIiKSAlPiUgZmlsdGVyKGNvbmRpdGlvbiAhPSAiYWxsIikpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAyIikKCgojIHN0dWR5IDMKY2hhcl9wbG90dGluZ19yYXRpbmdzX3MzIDwtIGQzICU+JSAKICBzZWxlY3QodGFyZ2V0LCBzdWJpZCwgaGFwcHk6cHJpZGUpICU+JQogIHJlbmFtZShjb25kaXRpb24gPSB0YXJnZXQpICU+JQogIGdhdGhlcihtYywgcmVzcG9uc2UsIC1zdWJpZCwgLWNvbmRpdGlvbikgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gYXMubnVtZXJpYyhyZXNwb25zZSkpICU+JQogIGdyb3VwX2J5KGNvbmRpdGlvbiwgbWMpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHJlc3BvbnNlKSkpKSAlPiUKICBmdWxsX2pvaW4oZGVtb1NhbXBsZVNpemUoInN0dWR5IDMiKSAlPiUgZmlsdGVyKGNvbmRpdGlvbiAhPSAiYWxsIikpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAzIikKCiMgc3R1ZHkgNApjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfczQgPC0gZDQgJT4lIAogIHNlbGVjdChjb25kaXRpb24sIHN1YmlkLCBoYXBweTpwcmlkZSkgJT4lCiAgZ2F0aGVyKG1jLCByZXNwb25zZSwgLXN1YmlkLCAtY29uZGl0aW9uKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkoY29uZGl0aW9uLCBtYykgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kcmVzcG9uc2UpKSkpICU+JQogIGZ1bGxfam9pbihkZW1vU2FtcGxlU2l6ZSgic3R1ZHkgNCIpICU+JSBmaWx0ZXIoY29uZGl0aW9uICE9ICJhbGwiKSkgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDQiKQpgYGAKCmBgYHtyIHBsb3R0aW5nIHNldHVwIGNoYXJhY3RlciBtZWFucyBtZXJnZSwgaW5jbHVkZSA9IEZ9CmNoYXJfcGxvdHRpbmdfcmF0aW5nc19hbGwgPC0gY2hhcl9wbG90dGluZ19yYXRpbmdzX3MxICU+JQogIGZ1bGxfam9pbihjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfczIpICU+JQogIGZ1bGxfam9pbihjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfczMpICU+JQogIGZ1bGxfam9pbihjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfczQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpLAogICAgICAgICBjb25kaXRpb24gPSBmYWN0b3IoY29uZGl0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygic3RhcGxlciIsICJjYXIiLCAiY29tcHV0ZXIiLCAicm9ib3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWljcm9iZSIsICJiZWV0bGUiLCAiZmlzaCIsICJibHVlamF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyb2ciLCAibW91c2UiLCAiZ29hdCIsICJkb2ciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVhciIsICJkb2xwaGluIiwgImVsZXBoYW50IiwgImNoaW1wIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZldHVzIiwgInB2cyIsICJpbmZhbnQiLCAiY2hpbGQiLCAiYWR1bHQiKSkpCmBgYAoKYGBge3IgcGxvdHRpbmcgc2V0dXAgY2FwYWNpdHkgd29yZGluZ3MsIGluY2x1ZGUgPSBGfQpjaGFyX3Bsb3R0aW5nX3dvcmRpbmdzIDwtIGNoYXJfcGxvdHRpbmdfcmF0aW5nc19hbGwgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdChtYykgJT4lCiAgZGlzdGluY3QoKSAlPiUgCiAgbXV0YXRlKHdvcmRpbmcgPSBmYWN0b3IoCiAgICByZWNvZGUobWMsCiAgICAgICAgICAgaHVuZ3J5ID0gImdldHRpbmcgaHVuZ3J5IiwgcGFpbiA9ICJleHBlcmllbmNpbmcgcGFpbiIsCiAgICAgICAgICAgdGlyZWQgPSAiZmVlbGluZyB0aXJlZCIsIGZlYXIgPSAiZXhwZXJpZW5jaW5nIGZlYXIiLAogICAgICAgICAgIGNvbXB1dGF0aW9ucyA9ICJkb2luZyBjb21wdXRhdGlvbnMiLCBwbGVhc3VyZSA9ICJleHBlcmllbmNpbmcgcGxlYXN1cmUiLAogICAgICAgICAgIGNvbnNjaW91cyA9ICJiZWluZyBjb25zY2lvdXMiLCBmcmVlX3dpbGwgPSAiaGF2aW5nIGZyZWUgd2lsbCIsCiAgICAgICAgICAgc2FmZSA9ICJmZWVsaW5nIHNhZmUiLCBkZXNpcmVzID0gImhhdmluZyBkZXNpcmVzIiwKICAgICAgICAgICBjYWxtID0gImZlZWxpbmcgY2FsbSIsIG5hdXNlYXRlZCA9ICJmZWVsaW5nIG5hdXNlYXRlZCIsCiAgICAgICAgICAgYW5ncnkgPSAiZ2V0dGluZyBhbmdyeSIsIGludGVudGlvbnMgPSAiaGF2aW5nIGludGVudGlvbnMiLAogICAgICAgICAgIHNlbGZfYXdhcmUgPSAiYmVpbmcgc2VsZi1hd2FyZSIsIG9kb3JzID0gImRldGVjdGluZyBvZG9ycyIsCiAgICAgICAgICAgZW1iYXJyYXNzZWQgPSAiZmVlbGluZyBlbWJhcnJhc3NlZCIsIHByaWRlID0gImV4cGVyaWVuY2luZyBwcmlkZSIsCiAgICAgICAgICAgbG92ZSA9ICJmZWVsaW5nIGxvdmUiLCBndWlsdCA9ICJleHBlcmllbmNpbmcgZ3VpbHQiLAogICAgICAgICAgIGRlcHJlc3NlZCA9ICJmZWVsaW5nIGRlcHJlc3NlZCIsIGRpc3Jlc3BlY3RlZCA9ICJmZWVsaW5nIGRpc3Jlc3BlY3RlZCIsCiAgICAgICAgICAgYmVsaWVmcyA9ICJob2xkaW5nIGJlbGllZnMiLCBlbW9fcmVjb2cgPSAidW5kZXJzdGFuZGluZyAuLi4gZmVlbGluZyIsCiAgICAgICAgICAgam95ID0gImV4cGVyaWVuY2luZyBqb3kiLCBwZXJzb25hbGl0eSA9ICJoYXZpbmcgYSBwZXJzb25hbGl0eSIsCiAgICAgICAgICAgaGFwcHkgPSAiZmVlbGluZyBoYXBweSIsIG1vcmFsaXR5ID0gInRlbGxpbmcgcmlnaHQgZnJvbSB3cm9uZyIsCiAgICAgICAgICAgdGhvdWdodHMgPSAiaGF2aW5nIHRob3VnaHRzIiwgc2VsZl9yZXN0cmFpbnQgPSAiZXhlcmNpc2luZyBzZWxmLXJlc3RyYWludCIsCiAgICAgICAgICAgcmVtZW1iZXJpbmcgPSAicmVtZW1iZXJpbmcgdGhpbmdzIiwgcmVjb2duaXppbmcgPSAicmVjb2duaXppbmcgb3RoZXJzIiwKICAgICAgICAgICB0ZW1wZXJhdHVyZSA9ICJzZW5zaW5nIHRlbXBlcmF0dXJlcyIsIGNvbW11bmljYXRpbmcgPSAiY29tbXVuaWNhdGluZyAuLi4iLAogICAgICAgICAgIGdvYWwgPSAid29ya2luZyB0b3dhcmQgYSBnb2FsIiwgZGVwdGggPSAicGVyY2VpdmluZyBkZXB0aCIsCiAgICAgICAgICAgc291bmRzID0gImRldGVjdGluZyBzb3VuZHMiLCBzZWVpbmcgPSAic2VlaW5nIHRoaW5ncyIsCiAgICAgICAgICAgY2hvaWNlcyA9ICJtYWtpbmcgY2hvaWNlcyIsIHJlYXNvbmluZyA9ICJyZWFzb25pbmcgYWJvdXQgdGhpbmdzIikpKQpgYGAKCgpgYGB7ciBwbG90dGluZyBzZXR1cCBsb2FkaW5ncywgaW5jbHVkZSA9IEZ9CiMgbWVyZ2Ugd2l0aCBsb2FkaW5ncywgb3JkZXJpbmdzLCBhbmQgZG9taW5hbnQgZmFjdG9ycyBmcm9tIGVhY2ggc3R1ZHkgCmNoYXJfcGxvdHRpbmcgPC0gY2hhcl9wbG90dGluZ19yYXRpbmdzX2FsbCAlPiUKICBmdWxsX2pvaW4oY2hhcl9wbG90dGluZ193b3JkaW5ncykgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3MxICU+JQogICAgICAgICAgICAgIG11dGF0ZShzMV9NUjFfYWJzID0gYWJzKHMxX01SMSksCiAgICAgICAgICAgICAgICAgICAgIHMxX01SMl9hYnMgPSBhYnMoczFfTVIyKSwKICAgICAgICAgICAgICAgICAgICAgczFfTVIzX2FicyA9IGFicyhzMV9NUjMpLAogICAgICAgICAgICAgICAgICAgICBzMV9mYWN0b3IgPSAKICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczFfTVIxX2FicyA+IHMxX01SMl9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxX01SMV9hYnMgPiBzMV9NUjNfYWJzLCAiQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzMV9NUjJfYWJzID4gczFfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxX01SMl9hYnMgPiBzMV9NUjNfYWJzLCAiSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMxX01SM19hYnMgPiBzMV9NUjFfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxX01SM19hYnMgPiBzMV9NUjJfYWJzLCAiTUlORCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICAgICAgICAgICAgICAgICAgIHMxX2NvbG9yID0gcmVjb2RlKHMxX2ZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJPRFkiID0gIiMzNzdFQjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEVBUlQiID0gIiM0REFGNEEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUlORCIgPSAiI0U0MUExQyIpLAogICAgICAgICAgICAgICAgICAgICBzMV9vcmRlciA9IGFzLm51bWVyaWMob3JkZXIxKSkgJT4lCiAgICAgICAgICAgICAgc2VsZWN0KC1zMV9NUjFfYWJzLCAtczFfTVIyX2FicywgLXMxX01SM19hYnMpKSAlPiUKICBmdWxsX2pvaW4ob3JkZXJfczIgJT4lCiAgICAgICAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzMl9NUjFfYWJzID0gYWJzKHMyX01SMSksCiAgICAgICAgICAgICAgICAgICAgIHMyX01SMl9hYnMgPSBhYnMoczJfTVIyKSwKICAgICAgICAgICAgICAgICAgICAgczJfTVIzX2FicyA9IGFicyhzMl9NUjMpLAogICAgICAgICAgICAgICAgICAgICBzMl9mYWN0b3IgPSAKICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczJfTVIxX2FicyA+IHMyX01SMl9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMyX01SMV9hYnMgPiBzMl9NUjNfYWJzLCAiQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzMl9NUjJfYWJzID4gczJfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMyX01SMl9hYnMgPiBzMl9NUjNfYWJzLCAiSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMyX01SM19hYnMgPiBzMl9NUjFfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMyX01SM19hYnMgPiBzMl9NUjJfYWJzLCAiTUlORCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICAgICAgICAgICAgICAgICAgIHMyX2NvbG9yID0gcmVjb2RlKHMyX2ZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJPRFkiID0gIiMzNzdFQjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEVBUlQiID0gIiM0REFGNEEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUlORCIgPSAiI0U0MUExQyIpKSAlPiUKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4odmFyID0gInMyX29yZGVyIikgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKHMyX29yZGVyID0gYXMubnVtZXJpYyhzMl9vcmRlcikpICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtczJfTVIxX2FicywgLXMyX01SMl9hYnMsIC1zMl9NUjNfYWJzKSkgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3MzICU+JQogICAgICAgICAgICAgIG11dGF0ZShzM19NUjFfYWJzID0gYWJzKHMzX01SMSksCiAgICAgICAgICAgICAgICAgICAgIHMzX01SMl9hYnMgPSBhYnMoczNfTVIyKSwKICAgICAgICAgICAgICAgICAgICAgczNfTVIzX2FicyA9IGFicyhzM19NUjMpLAogICAgICAgICAgICAgICAgICAgICBzM19mYWN0b3IgPSAKICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczNfTVIxX2FicyA+IHMzX01SMl9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzX01SMV9hYnMgPiBzM19NUjNfYWJzLCAiQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzM19NUjJfYWJzID4gczNfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzX01SMl9hYnMgPiBzM19NUjNfYWJzLCAiSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMzX01SM19hYnMgPiBzM19NUjFfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzX01SM19hYnMgPiBzM19NUjJfYWJzLCAiTUlORCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICAgICAgICAgICAgICAgICAgIHMzX2NvbG9yID0gcmVjb2RlKHMzX2ZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJPRFkiID0gIiMzNzdFQjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEVBUlQiID0gIiM0REFGNEEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUlORCIgPSAiI0U0MUExQyIpKSAlPiUKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4odmFyID0gInMzX29yZGVyIikgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKHMzX29yZGVyID0gYXMubnVtZXJpYyhzM19vcmRlcikpICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtczNfTVIxX2FicywgLXMzX01SMl9hYnMsIC1zM19NUjNfYWJzKSkgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3M0ICU+JQogICAgICAgICAgICAgIG11dGF0ZShzNF9NUjFfYWJzID0gYWJzKHM0X01SMSksCiAgICAgICAgICAgICAgICAgICAgIHM0X01SMl9hYnMgPSBhYnMoczRfTVIyKSwKICAgICAgICAgICAgICAgICAgICAgczRfTVIzX2FicyA9IGFicyhzNF9NUjMpLAogICAgICAgICAgICAgICAgICAgICBzNF9mYWN0b3IgPSAKICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczRfTVIxX2FicyA+IHM0X01SMl9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0X01SMV9hYnMgPiBzNF9NUjNfYWJzLCAiQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzNF9NUjJfYWJzID4gczRfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0X01SMl9hYnMgPiBzNF9NUjNfYWJzLCAiSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHM0X01SM19hYnMgPiBzNF9NUjFfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM0X01SM19hYnMgPiBzNF9NUjJfYWJzLCAiTUlORCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICAgICAgICAgICAgICAgICAgIHM0X2NvbG9yID0gcmVjb2RlKHM0X2ZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJPRFkiID0gIiMzNzdFQjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEVBUlQiID0gIiM0REFGNEEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUlORCIgPSAiI0U0MUExQyIpKSAlPiUKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4odmFyID0gInM0X29yZGVyIikgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKHM0X29yZGVyID0gYXMubnVtZXJpYyhzNF9vcmRlcikpICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtczRfTVIxX2FicywgLXM0X01SMl9hYnMsIC1zNF9NUjNfYWJzKSkKCiMgY29uZmlndXJlIHBsb3QgbGFiZWxzCmxhYmVsX2RmX3MxIDwtIGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgMSIpICU+JSBzZWxlY3QoY29uZGl0aW9uLCBuKSAlPiUgdW5pcXVlKCkKbGFiZWxfZGZfczIgPC0gY2hhcl9wbG90dGluZyAlPiUgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSAyIikgJT4lIHNlbGVjdChjb25kaXRpb24sIG4pICU+JSB1bmlxdWUoKQpsYWJlbF9kZl9zMyA8LSBjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDMiKSAlPiUgc2VsZWN0KGNvbmRpdGlvbiwgbikgJT4lIHVuaXF1ZSgpCmxhYmVsX2RmX3M0IDwtIGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgNCIpICU+JSBzZWxlY3QoY29uZGl0aW9uLCBuKSAlPiUgdW5pcXVlKCkKCmZhY2V0TGFic19zMSA8LSBnc3ViKCIgXFwoIiwgIlxuKCIsIG1ha2VGYWNldExhYnMoY2hhcl9wbG90dGluZyAlPiUgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSAxIikpKQpmYWNldExhYnNfczIgPC0gZ3N1YigiIFxcKCIsICJcbigiLCBtYWtlRmFjZXRMYWJzKGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgMiIpKSkKZmFjZXRMYWJzX3MzIDwtIGdzdWIoIiBcXCgiLCAiXG4oIiwgbWFrZUZhY2V0TGFicyhjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDMiKSkpCmZhY2V0TGFic19zNCA8LSBnc3ViKCIgXFwoIiwgIlxuKCIsIG1ha2VGYWNldExhYnMoY2hhcl9wbG90dGluZyAlPiUgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSA0IikpKQoKIyBjb25maWd1cmUgY3VzdG9tIHBhbGV0dGUKbXlQYWxldHRlIDwtIGJyZXdlci5wYWwoMywgIlNldDEiKTsgbmFtZXMobXlQYWxldHRlKSA8LSBjKCJCT0RZIiwgIkhFQVJUIiwgIk1JTkQiKQoKcGFsZXR0ZV9iYXNlIDwtIGNoYXJfcGxvdHRpbmcgJT4lIAogIHNlbGVjdChtYywgZW5kc193aXRoKCJfZmFjdG9yIikpICU+JQogIGRpc3RpbmN0KCkKcGFsZXR0ZV9zMSA8LSBjKHJlcChteVBhbGV0dGVbIk1JTkQiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczFfZmFjdG9yID09ICJNSU5EIikgJT4lIGNvdW50KCkpLAogICAgICAgICAgICAgICAgcmVwKG15UGFsZXR0ZVsiSEVBUlQiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczFfZmFjdG9yID09ICJIRUFSVCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkJPRFkiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczFfZmFjdG9yID09ICJCT0RZIikgJT4lIGNvdW50KCkpKQpwYWxldHRlX3MyIDwtIGMocmVwKG15UGFsZXR0ZVsiTUlORCJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzMl9mYWN0b3IgPT0gIk1JTkQiKSAlPiUgY291bnQoKSksCiAgICAgICAgICAgICAgICByZXAobXlQYWxldHRlWyJIRUFSVCJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzMl9mYWN0b3IgPT0gIkhFQVJUIikgJT4lIGNvdW50KCkpLAogICAgICAgICAgICAgICAgcmVwKG15UGFsZXR0ZVsiQk9EWSJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzMl9mYWN0b3IgPT0gIkJPRFkiKSAlPiUgY291bnQoKSkpCnBhbGV0dGVfczMgPC0gYyhyZXAobXlQYWxldHRlWyJNSU5EIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMzX2ZhY3RvciA9PSAiTUlORCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkhFQVJUIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMzX2ZhY3RvciA9PSAiSEVBUlQiKSAlPiUgY291bnQoKSksCiAgICAgICAgICAgICAgICByZXAobXlQYWxldHRlWyJCT0RZIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMzX2ZhY3RvciA9PSAiQk9EWSIpICU+JSBjb3VudCgpKSkKcGFsZXR0ZV9zNCA8LSBjKHJlcChteVBhbGV0dGVbIk1JTkQiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczRfZmFjdG9yID09ICJNSU5EIikgJT4lIGNvdW50KCkpLAogICAgICAgICAgICAgICAgcmVwKG15UGFsZXR0ZVsiSEVBUlQiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczRfZmFjdG9yID09ICJIRUFSVCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkJPRFkiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczRfZmFjdG9yID09ICJCT0RZIikgJT4lIGNvdW50KCkpKQpgYGAKCiMjIEZpZ3VyZSAxCgpNZWFuIHJhdGluZ3Mgb2YgNDAgbWVudGFsIGNhcGFjaXRpZXMgZm9yIGEgc3Vic2V0IG9mIHRoZSAyMSBlbnRpdGllcyBpbmNsdWRlZCBpbiBTdHVkeSA0LiAoU2VlIEZpZy4gUzUgZm9yIG1lYW4gcmF0aW5ncyBmb3IgdGhlIGZ1bGwgc2V0IG9mIGVudGl0aWVzLikgUGFydGljaXBhbnRzIHJlc3BvbmRlZCBvbiBhIHNjYWxlIGZyb20gMCAoTm90IGF0IGFsbCBjYXBhYmxlKSB0byA2IChIaWdobHkgY2FwYWJsZSkuIEVycm9yIGJhcnMgYXJlIG5vbnBhcmFtZXRyaWMgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscy4gTWVudGFsIGNhcGFjaXRpZXMgYXJlIGdyb3VwZWQgYWNjb3JkaW5nIHRvIHRoZWlyIGRvbWluYW50IGZhY3RvciBsb2FkaW5nIGluIFN0dWR5IDEuICpEb2luZyBjb21wdXRhdGlvbnMqIHdhcyB0aGUgb25seSBpdGVtIHRvIGxvYWQgbmVnYXRpdmVseSBvbiBpdHMgZG9taW5hbnQgZmFjdG9yIGluIGFueSBzdHVkeSAoYW5kIGRpZCBzbyBpbiBTdHVkaWVzIDEtMyk7IGluIFN0dWR5IDQsIGl0IGxvYWRlZCBwb3NpdGl2ZWx5IG9uIGl0cyBkb21pbmFudCBmYWN0b3IgKEZhY3RvciAyLCDigJxoZWFydOKAnSkuCgpgYGB7ciBmaWd1cmUgMSwgZmlnLndpZHRoID0gNiwgZmlnLmhlaWdodCA9IDZ9CiMgbWFrZSBkYXRhZnJhbWUKczRfc3Vic2V0X3Bsb3R0aW5nIDwtIGNoYXJfcGxvdHRpbmcgJT4lIAogIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgNCIsCiAgICAgICAgIGNvbmRpdGlvbiAlaW4lIGMoInN0YXBsZXIiLCAicm9ib3QiLCAiYmVldGxlIiwgImdvYXQiLCAiZWxlcGhhbnQiLCAiYWR1bHQiKSkgJT4lCiAgZGlzdGluY3QoKQoKIyBwbG90ISAob3JkZXJlZCBieSBzdHVkeSAxIGZhY3RvciBsb2FkaW5ncykKczRfc3Vic2V0IDwtIGdncGxvdChzNF9zdWJzZXRfcGxvdHRpbmcsIAogICAgICAgICAgICAgICBhZXMoeCA9IE1lYW4sIHkgPSByZW9yZGVyKHdvcmRpbmcsIGRlc2MoczFfb3JkZXIpKSwgY29sb3VyID0gczFfY29sb3IpKSArCiAgZ2VvbV9wb2ludChzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiaWRlbnRpdHkiLCBzaXplID0gNCkgKwogIGdlb21fZXJyb3JiYXJoKGFlcyh4bWluID0gTG93ZXIsIHhtYXggPSBVcHBlciksIGhlaWdodCA9IDApICsKICBmYWNldF93cmFwKH4gY29uZGl0aW9uLCBuY29sID0gNiwKICAgICAgICAgICAgIGxhYmVsbGVyID0gbGFiZWxsZXIoY29uZGl0aW9uID0gZmFjZXRMYWJzX3M0KSkgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJpdGFsaWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9IHBhbGV0dGVfczEpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiXG5NZWFuIHJhdGluZyIsCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTMsIDMpLAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzZXEoLTMsIDMsIDEpLAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBzZXEoMCwgNiwgMSkpICsKICBzY2FsZV9jb2xvdXJfYnJld2VyKG5hbWUgPSAiRmFjdG9yOiIsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gInF1YWwiLCBwYWxldHRlID0gNikKCnM0X3N1YnNldApgYGAKCiMjIEZpZ3VyZSBTMSAoc3VwcG9ydGluZyBtYXRlcmlhbHMpCgpGYWN0b3IgbG9hZGluZ3MgZm9yIHRoZSA0MCBtZW50YWwgY2FwYWNpdGllcyBvbiB0aGUgdGhyZWUgcm90YXRlZCBmYWN0b3JzIGluIFN0dWR5IDEuIEl0ZW1zIGFyZSBjb2xvcmVkIGJ5IHRoZWlyIGRvbWluYW50IGZhY3RvciBsb2FkaW5nOiBJdGVtcyB0aGF0IGxvYWRlZCBtb3N0IHN0cm9uZ2x5IG9uIHRoZSBib2R5IGZhY3RvciAocGh5c2lvbG9naWNhbCBzdGF0ZXMgYW5kIHdpbGwpIGFyZSBpbiByZWQ7IGl0ZW1zIHRoYXQgbG9hZGVkIG1vc3Qgc3Ryb25nbHkgb24gdGhlIGhlYXJ0IGZhY3RvciAoc29jaWFsLWVtb3Rpb25hbCBleHBlcmllbmNlcyBhbmQgbW9yYWxpdHkpIGFyZSBpbiBibHVlOyBhbmQgaXRlbXMgdGhhdCBsb2FkZWQgbW9zdCBzdHJvbmdseSBvbiB0aGUgbWluZCBmYWN0b3IgKHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyBhbmQgZ29hbCBwdXJzdWl0KSBhcmUgaW4gZ3JlZW4uCgpgYGB7ciBmaWd1cmUgUzEsIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gNn0KIyBzZXQgdXAgbGFiZWxzIGZvciBwbG90IChzaG9ydGVuZWQgdmVyc2lvbiBvZiBtZW50YWwgY2FwYWNpdHkgaXRlbXMpCndvcmRpbmcgPC0gbG9hZGluZ3MoZWZhX2QxX2FsbF9yb3RhdGVkTilbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJpdGVtIikgJT4lCiAgc2VsZWN0KGl0ZW0pICU+JQogIG11dGF0ZSh3b3JkaW5nID0gYygiZmVlbGluZyBoYXBweSIsICJmZWVsaW5nIGRlcHJlc3NlZCIsICJleHBlcmllbmNpbmcgZmVhciIsCiAgICAgICAgICAgICAgICAgICAgICJnZXR0aW5nIGFuZ3J5IiwgImZlZWxpbmcgY2FsbSIsICJkZXRlY3Rpbmcgc291bmRzIiwKICAgICAgICAgICAgICAgICAgICAgInNlZWluZyB0aGluZ3MiLCAic2Vuc2luZyB0ZW1wZXJhdHVyZXMiLCAiZGV0ZWN0aW5nIG9kb3JzIiwKICAgICAgICAgICAgICAgICAgICAgInBlcmNlaXZpbmcgZGVwdGgiLCAiZG9pbmcgY29tcHV0YXRpb25zIiwgImhhdmluZyB0aG91Z2h0cyIsCiAgICAgICAgICAgICAgICAgICAgICJyZWFzb25pbmcgYWJvdXQgdGhpbmdzIiwgInJlbWVtYmVyaW5nIHRoaW5ncyIsICJob2xkaW5nIGJlbGllZnMiLAogICAgICAgICAgICAgICAgICAgICAiZ2V0dGluZyBodW5ncnkiLCAiZmVlbGluZyB0aXJlZCIsICJleHBlcmllbmNpbmcgcGFpbiIsCiAgICAgICAgICAgICAgICAgICAgICJmZWVsaW5nIG5hdXNlYXRlZCIsICJmZWVsaW5nIHNhZmUiLCAiZmVlbGluZyBsb3ZlIiwKICAgICAgICAgICAgICAgICAgICAgInJlY29nbml6aW5nIHNvbWVvbmUiLCAiY29tbXVuaWNhdGluZyB3aXRoIG90aGVycyIsICJleHBlcmllbmNpbmcgZ3VpbHQiLAogICAgICAgICAgICAgICAgICAgICAiZmVlbGluZyBkaXNyZXNwZWN0ZWQiLCAiaGF2aW5nIGZyZWUgd2lsbCIsICJtYWtpbmcgY2hvaWNlcyIsCiAgICAgICAgICAgICAgICAgICAgICJleGVyY2lzaW5nIHNlbGYtcmVzdHJhaW50IiwgImhhdmluZyBpbnRlbnRpb25zIiwgIndvcmtpbmcgdG93YXJkIGEgZ29hbCIsCiAgICAgICAgICAgICAgICAgICAgICJiZWluZyBjb25zY2lvdXMiLCAiYmVpbmcgc2VsZi1hd2FyZSIsICJoYXZpbmcgZGVzaXJlcyIsCiAgICAgICAgICAgICAgICAgICAgICJmZWVsaW5nIGVtYmFycmFzc2VkIiwgInVuZGVyc3RhbmRpbmcgaG93IG90aGVycyBhcmUgZmVlbGluZyIsIAogICAgICAgICAgICAgICAgICAgICAiZXhwZXJpZW5jaW5nIGpveSIsICJ0ZWxsaW5nIHJpZ2h0IGZyb20gd3JvbmciLCAiaGF2aW5nIGEgcGVyc29uYWxpdHkiLAogICAgICAgICAgICAgICAgICAgICAiZXhwZXJpZW5jaW5nIHBsZWFzdXJlIiwgImV4cGVyaWVuY2luZyBwcmlkZSIpLAogICAgICAgICBzaG9ydCA9IGMoImhhcHBpbmVzcyIsICJkZXByZXNzaW9uIiwgImZlYXIiLAogICAgICAgICAgICAgICAgICAgImFuZ2VyIiwgImNhbG0iLCAic291bmQiLAogICAgICAgICAgICAgICAgICAgInNpZ2h0IiwgInRlbXBlcmF0dXJlIiwgIm9kb3IiLAogICAgICAgICAgICAgICAgICAgImRlcHRoIiwgImNvbXB1dGF0aW9uIiwgInRob3VnaHQiLAogICAgICAgICAgICAgICAgICAgInJlYXNvbmluZyIsICJtZW1vcnkiLCAiYmVsaWVmIiwKICAgICAgICAgICAgICAgICAgICJodW5nZXIiLCAidGlyZWRuZXNzIiwgInBhaW4iLAogICAgICAgICAgICAgICAgICAgIm5hdXNlYSIsICJzYWZldHkiLCAibG92ZSIsCiAgICAgICAgICAgICAgICAgICAicmVjb2duaXRpb24iLCAiY29tbXVuaWNhdGlvbiIsICJndWlsdCIsCiAgICAgICAgICAgICAgICAgICAiZGlzcmVzcGVjdCIsICJmcmVlIHdpbGwiLCAiY2hvaWNlIiwKICAgICAgICAgICAgICAgICAgICJzZWxmLXJlc3RyYWludCIsICJpbnRlbnRpb24iLCAiZ29hbCIsCiAgICAgICAgICAgICAgICAgICAiY29uc2Npb3VzbmVzcyIsICJzZWxmLWF3YXJlbmVzcyIsICJkZXNpcmUiLAogICAgICAgICAgICAgICAgICAgImVtYmFycmFzc21lbnQiLCAiZW1wYXRoeSIsIAogICAgICAgICAgICAgICAgICAgImpveSIsICJtb3JhbGl0eSIsICJwZXJzb25hbGl0eSIsCiAgICAgICAgICAgICAgICAgICAicGxlYXN1cmUiLCAicHJpZGUiKSkKCiMgbWFrZSBkYXRhZnJhbWUgZm9yIHBsb3R0aW5nCnNjYXR0ZXJfcGxvdHRpbmcgPC0gbG9hZGluZ3MoZWZhX2QxX2FsbF9yb3RhdGVkTilbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJpdGVtIikgJT4lCiAgcmVuYW1lKEJPRFkgPSBNUjEsCiAgICAgICAgIEhFQVJUID0gTVIyLAogICAgICAgICBNSU5EID0gTVIzKSAlPiUKICBmdWxsX2pvaW4od29yZGluZykgJT4lCiAgbXV0YXRlKGRvbWluYW50ID0gZmFjdG9yKAogICAgaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhCT0RZKSwgIkJPRFkiLAogICAgICAgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoSEVBUlQpLCAiSEVBUlQiLAogICAgICAgICAgICAgICAgICBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKE1JTkQpLCAiTUlORCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSksCiAgICBzaXplID0gaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhCT0RZKSwgYWJzKEJPRFkpLAogICAgICAgICAgICAgICAgICBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKEhFQVJUKSwgYWJzKEhFQVJUKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoTUlORCksIGFicyhNSU5EKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSwKICAgIGNvbG9yID0gaWZlbHNlKGRvbWluYW50ID09ICJCT0RZIiwgIiNlNDFhMWMiLAogICAgICAgICAgICAgICAgICAgaWZlbHNlKGRvbWluYW50ID09ICJIRUFSVCIsICIjMzc3ZWI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZG9taW5hbnQgPT0gIk1JTkQiLCAiIzRkYWY0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKQoKIyBwbG90IQpmaWdTMSA8LSBwbG90X2x5KGRhdGEgPSBzY2F0dGVyX3Bsb3R0aW5nLCAKICAgICAgICAgICAgICAgICB4ID0gfkhFQVJULCB5ID0gfkJPRFksIHogPSB+TUlORCwKICAgICAgICAgICAgICAgICB0eXBlID0gInNjYXR0ZXIzZCIsCiAgICAgICAgICAgICAgICAgY29sb3IgPSB+ZG9taW5hbnQsIGNvbG9ycyA9IGMoIiM0ZGFmNGEiLCAiI2U0MWExYyIsICIjMzc3ZWI4IiksCiAgICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdChzaXplID0gNCksCiAgICAgICAgICAgICAgICAgdGV4dCA9IH5zaG9ydCwKICAgICAgICAgICAgICAgICB0ZXh0Zm9udCA9IGxpc3Qoc2l6ZSA9IDE1KSwKICAgICAgICAgICAgICAgICBtb2RlID0gInRleHQrbWFya2VycyIsCiAgICAgICAgICAgICAgICAgc2hvd2xlZ2VuZCA9IFRSVUUpCgpmaWdTMQpgYGAKCiMjIEZpZ3VyZSBTMiAoc3VwcG9ydGluZyBtYXRlcmlhbHMpCgpNZWFuIHJhdGluZ3Mgb2YgNDAgbWVudGFsIGNhcGFjaXRpZXMgZm9yIHRoZSAyIGVudGl0aWVzIGluY2x1ZGVkIGluIFN0dWRpZXMgMS0zLiBQYXJ0aWNpcGFudHMgcmVzcG9uZGVkIG9uIGEgc2NhbGUgZnJvbSAwIChOb3QgYXQgYWxsIGNhcGFibGUpIHRvIDYgKEhpZ2hseSBjYXBhYmxlKS4gRXJyb3IgYmFycyBhcmUgbm9ucGFyYW1ldHJpYyBib290c3RyYXBwZWQgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLiBNZW50YWwgY2FwYWNpdGllcyBhcmUgZ3JvdXBlZCBhY2NvcmRpbmcgdG8gdGhlaXIgZG9taW5hbnQgZmFjdG9yIGxvYWRpbmcgaW4gU3R1ZHkgMS4KCmBgYHtyIGZpZ3VyZSBTMiwgZmlnLndpZHRoID0gNSwgZmlnLmhlaWdodCA9IDZ9CiMgbWFrZSBkYXRhZnJhbWUKczEyM19wbG90dGluZyA8LSBjaGFyX3Bsb3R0aW5nICU+JSAKICBmaWx0ZXIoc3R1ZHkgIT0gInN0dWR5IDQiKSAlPiUKICBkaXN0aW5jdCgpCgojIHBsb3QhIChvcmRlcmVkIGJ5IHN0dWR5IDMgZmFjdG9yIGxvYWRpbmdzKQpzMTIzIDwtIGdncGxvdChzMTIzX3Bsb3R0aW5nLCAKICAgICAgICAgICAgICAgYWVzKHkgPSBNZWFuLCB4ID0gcmVvcmRlcih3b3JkaW5nLCBkZXNjKHMxX29yZGVyKSksIGNvbG91ciA9IHMxX2NvbG9yLAogICAgICAgICAgICAgICAgICAgc2hhcGUgPSBzdHVkeSkpICsKICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC42KSwgc2l6ZSA9IDQpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gTG93ZXIsIHltYXggPSBVcHBlciksIHdpZHRoID0gMCwKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjYpKSArCiAgZmFjZXRfd3JhcCh+IGNvbmRpdGlvbikgKwogIHRoZW1lX2J3KCkgKwogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlxuTWVhbiByYXRpbmciLAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0zLCAzKSwKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gc2VxKC0zLCAzLCAxKSwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2VxKDAsIDYsIDEpKSArCiAgc2NhbGVfc2hhcGVfZGlzY3JldGUobmFtZSA9ICJTdHVkeToiKSArCiAgc2NhbGVfY29sb3VyX2JyZXdlcihuYW1lID0gIkZhY3RvcjoiLAogICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJxdWFsIiwgcGFsZXR0ZSA9IDYsCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IEZBTFNFKSArCiAgY29vcmRfZmxpcCgpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCksCiAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJpdGFsaWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSBwYWxldHRlX3MxKSwKICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikKCnMxMjMKYGBgCgojIyBGaWd1cmUgUzMgKHN1cHBvcnRpbmcgbWF0ZXJpYWxzKQoKTWVhbiByYXRpbmdzIG9mIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciBhbGwgMjEgZW50aXRpZXMgaW5jbHVkZWQgaW4gU3R1ZHkgNC4gUGFydGljaXBhbnRzIHJlc3BvbmRlZCBvbiBhIHNjYWxlIGZyb20gMCAoTm90IGF0IGFsbCBjYXBhYmxlKSB0byA2IChIaWdobHkgY2FwYWJsZSkuIEVycm9yIGJhcnMgYXJlIG5vbnBhcmFtZXRyaWMgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscy4gTWVudGFsIGNhcGFjaXRpZXMgYXJlIGdyb3VwZWQgYWNjb3JkaW5nIHRvIHRoZWlyIGRvbWluYW50IGZhY3RvciBsb2FkaW5nIGluIFN0dWR5IDQuCgpgYGB7ciBmaWd1cmUgUzMsIGZpZy53aWR0aCA9IDEyLCBmaWcuaGVpZ2h0ID0gNn0KIyBtYWtlIGRhdGFmcmFtZQpzNF9wbG90dGluZyA8LSBjaGFyX3Bsb3R0aW5nICU+JSAKICBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDQiKSAlPiUKICBkaXN0aW5jdCgpCgojIHBsb3QhIChvcmRlcmVkIGJ5IHN0dWR5IDQgZmFjdG9yIGxvYWRpbmdzKQpzNCA8LSBnZ3Bsb3QoczRfcGxvdHRpbmcsIAogICAgICAgICAgICAgICBhZXMoeCA9IE1lYW4sIHkgPSByZW9yZGVyKHdvcmRpbmcsIGRlc2MoczRfb3JkZXIpKSwgY29sb3VyID0gczRfY29sb3IpKSArCiAgZ2VvbV9wb2ludChzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiaWRlbnRpdHkiLCBzaXplID0gNCkgKwogIGdlb21fZXJyb3JiYXJoKGFlcyh4bWluID0gTG93ZXIsIHhtYXggPSBVcHBlciksIGhlaWdodCA9IDApICsKICBmYWNldF93cmFwKH4gY29uZGl0aW9uLCBuY29sID0gMjEsCiAgICAgICAgICAgICBsYWJlbGxlciA9IGxhYmVsbGVyKGNvbmRpdGlvbiA9IGZhY2V0TGFic19zNCkpICsKICB0aGVtZV9idygpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiaXRhbGljIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSBwYWxldHRlX3M0KSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIlxuTWVhbiByYXRpbmciLAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0zLCAzKSwKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gc2VxKC0zLCAzLCAxKSwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2VxKDAsIDYsIDEpKSArCiAgc2NhbGVfY29sb3VyX2JyZXdlcihuYW1lID0gIkZhY3RvcjoiLAogICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJxdWFsIiwgcGFsZXR0ZSA9IDYpCgpzNApgYGAKCg==